我的代码在嵌套目录中排序,如
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 $@
如何定义目标以实现上述目标?
答案 0 :(得分:2)
由于你已经使用了GNU make(obj/%.o : src/%.c
@mkdir -p $(@D)
$(CC) $(CC_FLAGS) -c $< -o $@
),你可以使用比后缀规则更强大的pattern rules:
B4