文件名:Makefile.mk
%: foo
@echo %: $@ with foo
foo:
@echo foo
运行
$ make -f Makefile.mk test
输出:
foo
%: Makefile.mk with foo
%: test with foo
我在GNU Make 3.81版本中运行它。 我不明白,为什么还要打印文件名(%:Makefile.mk with foo )。 有人可以解释一下吗?
答案 0 :(得分:2)
这是因为how makefiles are remade。那就是说
有时makefile可以从其他文件重新制作
和
如果可以从其他文件重新制作makefile,您可能希望make获取要读取的makefile的最新版本
所以
在阅读所有makefile后,make会将每个作为目标目标并尝试更新它。
然后匹配您的匹配任何规则并触发您看到的方式。
如果向makefile添加一个显式的Makefile.mk: ;
目标,它将覆盖match-anything目标并阻止它。