makefile-嵌套目录中具有SRC和OBJ文件的通用目标规则



我在嵌套目录中排序

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 $@

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

由于您已经使用了GNU MAKE(patsubst),因此您不妨使用模式规则,这些规则比后缀规则更强大:

obj/%.o : src/%.c
        @mkdir -p $(@D)
        $(CC) $(CC_FLAGS) -c $< -o $@

最新更新