在GNU Make中,依赖于非模式文件的模式规则的语义究竟是什么?
我在Makefile中有以下代码段 . 当 foo.a
存在时,当调用 make foo.b
时,GNU Make似乎不会创建 foo.b
.
.SUFFIXES:
%.b: move_a_to_b.artifact
move_a_to_b.artifact:
mv foo.a foo.b
touch move_a_to_b.artifact
但是,以下工作正常,并将文件从 foo.a
移动到 foo.b
.
.SUFFXIES:
%.b: %.a
mv $< $@
就像这样,使用模式规则取决于模式规则
.SUFFIXES:
%.b: %.intermediate
mv $< $@
%.intermediate: %.a
mv $< $@
1 回答
它没有't have anything to do with pattern rules depending on non-patterns. That'很好并且它具有预期的语义:对于任何以
.b
结尾的文件,如果它相对于文件move_a_to_b.artifact
已经过时,那么将运行配方 .您的问题是您're not defining a pattern rule, you'正在删除模式规则 . 模式规则必须始终具有配方 . 没有配方的模式规则会删除模式规则 . 见Canceling Pattern Rules .
你必须添加一个食谱,然后它会做一些事情: