Makefile - 嵌套目录中带有src-和obj-文件的通用目标规则

时间:2017-03-02 12:49:17

标签: makefile gnu-make

我的代码在嵌套目录中排序,如

src/cmn/abc.cpp
src/voc/xyz.cpp

期望的对象输出应该是

obj/cmn/abc.o
obj/voc/xyz.o

Makefile条目是

SRC_FILES := src/cmn/abc.cpp src/voc/xyz.cpp
OBJ_FILES := $(patsubst %.cpp,*.o,$(patsubst src/%,obj%,$SRC_FILES))

通用目标规则很简单(太简单)并且无法按预期工作。它在src文件旁边创建了obj文件,因为它错过了模式替换。此外,它错过了目录创建(如obj/voc)。

.cpp.o:
        @$(CC) $(CC_FLAGS) $< -o $@

如何定义目标以实现上述目标?

1 个答案:

答案 0 :(得分:2)

由于你已经使用了GNU make(obj/%.o : src/%.c @mkdir -p $(@D) $(CC) $(CC_FLAGS) -c $< -o $@ ),你可以使用比后缀规则更强大的pattern rules

B4