在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就可以找到没有参数的它,并且你必须在其中使用实际的制表符进行缩进(在下面的g++和rm命令之前)。
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。