我有这个最小的Makefile:
.PHONY: foo.bar
%.bar:
echo $*
我运行$ make foo.bar
并且我希望它与%.bar模式匹配,使用“foo”填充词干$ *,并且始终回显“foo”因为foo.bar是虚假目标。但是,我得到的输出是
make: Nothing to be done for 'foo.bar'.
我在这里错过了什么吗?
修改
我忘了提到删除.PHONY行会执行回显“foo”的预期行为,并使其成为没有模式匹配的显式目标“foo.bar”。两者都很有意义,因为在前者中,文件foo.bar不存在,而在后者中,嗯,它只是明确的。
修改
这实际上可能与此重复:When declaring the pattern rule as PHONY, it is not triggered。这是有用的东西:
.PHONY: foo.bar
foo.bar: %.bar:
echo $*
无论出于何种原因,目标/依赖关系行更像目标/(依赖关系|目标)/依赖关系。有人可以解释一下或指向我的文档吗?
答案 0 :(得分:1)
来自.PHONY
targets的制作手册部分:
.PHONY
个目标会跳过隐式规则搜索(请参阅隐式规则)。
意味着您的%.bar:
规则被忽略了。
摆脱.PHONY
当然按预期工作;使用规则foo.bar: %.bar:
是有效的,因为静态模式规则不是隐式规则,因此.PHONY
目标不会被忽略。