首页 文章

GNU Make:假目标似乎不匹配模式

提问于
浏览
1

我有这个最小的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 回答

  • 1

    .PHONY targets的制作手册部分:

    对于.PHONY目标,将跳过隐式规则搜索(请参阅隐式规则) .

    意味着你的 %.bar: 规则被忽略了 .

    摆脱 .PHONY 当然按预期工作;使用规则 foo.bar: %.bar: 是有效的,因为静态模式规则不是隐式规则,因此 .PHONY 目标不会被忽略 .

相关问题