我正在慢慢地通过gnu make documentation丛林战斗(尽管它很棒 - 只是很多)。
我遇到了模式规则:
%.png: file1 file2
run command here
还有可用作目标的通配符:
FILES = $(wildcard *.png)
现在我可以写:
$(FILES): file1 file2
run command here
第一个和第二个用例之间有什么区别吗?
答案 0 :(得分:2)
在%.png
的情况下:如果任何其他规则反过来要求某个文件(它本身没有明确的规则,但以.png
结尾),则会调用此规则
所以,%.png: %.jpeg
(例如)说,“除非有更具体的规则,否则以下是如何将JPEG转换为PNG图像。”
$(FILES)
列举了您可能想要创建的依赖项列表。对于规则的目标而言,这不是真正的事情,而是对于一个规则的依赖性。
例如,可以使用像images.zip: $(FILES)
这样的虚假目标来说明$(FILES)
之前所有images.zip
必须是最新的。
使用通配符源当然是相当“危险”的,因为make
将无法检测到丢失的文件,因此可能会产生“错误肯定”的构建结果。