使用G ++在Sublime 2中编译多个* .cpp和* .h文件

时间:2014-02-22 15:36:52

标签: c++ g++ sublimetext2 build-system

在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中创建一个构建系统,使用命令行模式在命令行上编译多个文件?

2 个答案:

答案 0 :(得分:7)

谢谢hyde。

根据您的建议使用构建系统后,这有效:

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

答案 1 :(得分:0)

你应该使用这样的东西:

{
 "cmd" : ["gmake"]
}

或者可能只是make而不是gmake。但是如果你有gcc,GNU make应该在同一个目录中。下面的示例 Makefile 使用GNU Make进行测试,如果没有其他地方的小修改,它可能无法正常工作。

所以这里是一个非常原始的Makefile。重要!它应该命名为Makefile,因此GNU Make会在没有参数的情况下找到它,并且在其中你必须使用实际的tab char进行缩进(在 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