可编译整个目录

时间:2011-05-31 18:18:47

标签: c++ build makefile compilation

是否有一种干净/可移植的方式从给定目录递归下降,将所有找到的.cpp文件编译成单个输出文件?我不确定makefile是否能够处理这类事情,或者它是否适用于某种构建脚本,但我想避免将各种IDE的项目文件与代码一起保存。

2 个答案:

答案 0 :(得分:2)

可以使用wildcard function来匹配这样的模式:

CXX_FILES = $(wildcard src/*.cpp)   # All .cpp files in the directory

这不是递归的,但至少可以让您不必手动指定某个目录中的文件。构建它们的规则看起来像这样:

CXX_FILES = $(wildcard src/*.cpp)   # All .cpp files in the directory
OBJ_FILES = $(CXX_FILES:src/%.cpp=$(OBJ_DIR)/%.o)   # Corresponding .o files

# Rules
all: $(OBJ_FILES)
    g++ $(OBJ_FILES) -o output_filename

$(OBJ_DIR)/%.o: src/%.cpp
    g++ -c $< -o $@

哦,回答你的问题,这个方法是完全可移植的。

答案 1 :(得分:2)

你可以在这里做不同的事情。我建议你使用多平台构建系统,并按照它的文档。我过去曾使用过CMake,但我不知道如何告诉它编译目录中的所有文件。

优点是用户可以使用CMake为大多数常见IDE生成项目文件,因此它允许VisualStudio用户生成VS解决方案,MacOSX用户生成Xcode项目,几乎任何环境中的Eclipse CDK项目,Makefile。 ..