我在makefile中遇到过这样的模式
CXXOBJ = f1.o f2.o f3.o
$(CXXOBJ): %.o: %.cpp
g++ -c $< -o $@
f1.o: f1.cpp f1.hpp f2.hpp
f2.o: f2.cpp f2.hpp f3.hpp macros.h
f3.o: f3.cpp f3.hpp
它工作(至少使用GNU make 4.0)。
它使用第4行的通用配方,
但另外还使用底部定义的依赖关系。
make
行为吗? (或者它是否特定于GNU-make?)make
如何为同一个文件组合2个不同的规则? (只是追加依赖列表或更多内容?)答案 0 :(得分:4)
这称为静态模式规则(https://www.gnu.org/software/make/manual/html_node/Static-Usage.html)。它特定于GNU make。当不同的目标需要不同的配方来构建时,它可能会很有用,但匹配相同的模式。
至于第三个问题,同一个文件没有明确的规则。一切都定义得很好,每个目标都有相应的.cpp文件。
答案 1 :(得分:3)
一个文件可以成为多个规则的目标。所有依赖项 所有规则中提到的都被合并到一个依赖项列表中 为了目标......
只能为文件执行一组命令。如果 多个规则为同一个文件提供命令,make使用 最后一组给出并打印错误信息......