我在嵌套目录中排序
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 $@