【发布时间】:2017-04-10 14:04:29
【问题描述】:
我有以下 makefile sn-p 来编译我的 C++ 项目。
obj/%.o: src/%.cpp
$(CXX) $(CFLAGS) -c $< -o $@
现在我想链接.o 文件。但我希望能够只调用链接的规则名称,例如 make build/main,以便编译 AND 链接。
这都不是:
build/main: $(wildcard obj/*.o)
$(CXX) $^ -o $@
有效,因为它只链接而不编译,正如this answer 所期望的那样;
也不是这个:
build/main: obj/%.o
$(CXX) $^ -o $@
出现错误:
'build/main' 需要目标'obj/%.o' 没有规则。停下来。
即使它是必需的。
【问题讨论】:
-
build/main: $(wildcard obj/*.o)不起作用,因为通配符将在第一次读取规则时扩展(在构建 .o 之前,在它们存在于文件系统之前,所以它会扩展为空)。