Использование G ++ для компиляции нескольких файлов * .cpp и * .h в Sublime 2

На 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, которая использует шаблоны командной строки для компиляции нескольких файлов, как я могу в командной строке?

1

Решение

Спасибо Хайд.

После игры с системой сборки, основанной на вашем предложении, это работает:

{
"cmd" : ["g++ *.cpp -o executablename"],
"shell":true
}
5

Другие решения

Возможно, вам следует использовать что-то вроде этого:

{
"cmd" : ["gmake"]
}

Или, возможно, просто make вместо gmake, Но если у вас есть gccGNU 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.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector