$(VARIABLE)和%模式规则之间的差异

时间:2016-09-06 14:58:47

标签: makefile gnu-make

我正在慢慢地通过gnu make documentation丛林战斗(尽管它很棒 - 只是很多)。

我遇到了模式规则

%.png: file1 file2
    run command here

还有可用作目标的通配符:

FILES = $(wildcard *.png)

现在我可以写:

$(FILES): file1 file2
    run command here

第一个和第二个用例之间有什么区别吗?

1 个答案:

答案 0 :(得分:2)

%.png的情况下:如果任何其他规则反过来要求某个文件(它本身没有明确的规则,但以.png结尾),则会调用此规则

所以,%.png: %.jpeg(例如)说,“除非有更具体的规则,否则以下是如何将JPEG转换为PNG图像。”

$(FILES)列举了您可能想要创建的依赖项列表。对于规则的目标而言,这不是真正的事情,而是对于一个规则的依赖性。

例如,可以使用像images.zip: $(FILES)这样的虚假目标来说明$(FILES)之前所有images.zip必须是最新的。

使用通配符源当然是相当“危险”的,因为make将无法检测到丢失的文件,因此可能会产生“错误肯定”的构建结果。