На MAC я могу успешно скомпилировать программу на C ++ из командной строки, используя
g++ *.cpp *.h -o executablename
Однако это не удается из Sublime 2 — я создал систему сборки для этого, используя
{
"cmd" : ["g++", "*.cpp", "*.h", "-o", "executablename"]
}
С этими результатами
i686-apple-darwin11-llvm-g++-4.2: *.cpp: No such file or directory
i686-apple-darwin11-llvm-g++-4.2: *.h: No such file or directory
i686-apple-darwin11-llvm-g++-4.2: no input files
[Finished in 0.0s with exit code 1]
Однако, если я создаю систему сборки с конкретными именами файлов в проекте, она работает:
{
"cmd" : ["g++", "Test.cpp", "TestCode.cpp", "TestCode.h", "TestCode2.cpp", "TestCode2.h", "-o", "executablename"]
}
Как я могу создать систему сборки в Sublime 2, которая использует шаблоны командной строки для компиляции нескольких файлов, как я могу в командной строке?
Спасибо Хайд.
После игры с системой сборки, основанной на вашем предложении, это работает:
{
"cmd" : ["g++ *.cpp -o executablename"],
"shell":true
}
Возможно, вам следует использовать что-то вроде этого:
{
"cmd" : ["gmake"]
}
Или, возможно, просто make
вместо gmake
, Но если у вас есть gcc
GNU make должен находиться в том же каталоге. Ниже пример Makefile протестирован с GNU Make, он может не работать без небольших изменений в другом месте.
Так что вот вам очень примитивный Makefile. Важный! Должно быть названо Makefile
так что GNU Make найдет его без аргументов, а в нем вы должен использовать фактический символ табуляции для отступа (перед г ++ а также комната команда ниже).
CXXFLAGS := -Wall -Wextra $(CXXFLAGS) # example of setting compilation flags
# first rule is default rule, commonly called 'all'
# if there many executables, you could list them all
all: executablename
# we take advantage of predefined "magic" rule to create .o files from .cpp
# a rule for linking .o files to executable, using g++ to get C++ libs right
executablename: TestCode.o TestCode2.o Test.o
g++ $^ -o $@
# $^ means all dependencies (the .o files in above rule)
# $@ means the target (executablename in above rule)
# rule to delete generated files, - at start means error is ignored
clean:
-rm executablename *.o
Но даже использование рукописного Makefile может считаться примитивным в наши дни. Возможно, вам следует установить и научиться использовать CMake.