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