考虑以下Makefile
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<svg id="btn-test1" viewbox="0 0 40 40">
<circle id="path1" opacity="0.33" fill="#913A3A" stroke="#CDC9C4" stroke-miterlimit="10" cx="20" cy="20" r="18.6" />
</svg>
发出foo:
@echo '$@'
test:
@echo '$@'
@echo '---'
# Catch-all target
%: test
@echo '+++'
@echo '$@'
时,控制台输出如下:
make bar
我想了解$ make bar
test
---
+++
Makefile
+++
bar
的来源,它表明它在某些时候被作为参数接收,以及如何在这样的方案中摆脱它。这是使用
Makefile
答案 0 :(得分:1)
GNU make将makefile本身视为需要更新的目标。见How Makefiles Are Remade:
...在阅读所有makefile后,make会将每个作为目标目标并尝试更新它。如果一个makefile有一条规则说明如何更新它(在那个makefile或另一个中找到)或者隐含规则是否适用于它(参见使用隐式规则),它将在必要时更新......
如果您知道您的一个或多个makefile无法重新制作,并且您希望让make不对其执行隐式规则搜索,可能出于效率原因,您可以使用任何阻止隐式规则查找的常规方法这样做。例如,您可以编写一个以makefile作为目标的显式规则,以及一个空配方(请参阅使用空配方)。
因此,catch-all-target %
用于更新Makefile。
Makefiles通常不需要更新,因此习惯上为此添加一个空规则:
Makefile : ;