$(VARIABLE) 和 % 模式规则之间的区别
Difference between $(VARIABLE) and % pattern rule
我正在 gnu make 文档丛林中慢慢奋斗(尽管它非常好 — 只是很多)。
我遇到了模式规则:
%.png: file1 file2
run command here
还有可用作目标的通配符:
FILES = $(wildcard *.png)
现在我可以写了:
$(FILES): file1 file2
run command here
第一个和第二个用例有区别吗?
在%.png
的情况下:如果任何其他规则反过来要求某个文件,该文件本身没有明确的规则,但以.png
结尾,那么该规则将被调用。
因此,%.png: %.jpeg
(例如)说,“除非有更具体的规则,否则这里是如何从 JPEG 转换为 PNG 图像。”
$(FILES)
正在枚举您可能想要创建的依赖项列表。对于规则的目标来说,这并不是真正的事情,而是对于一个人的依赖关系。
例如,像 images.zip: $(FILES)
这样的虚假目标可以用来表示所有 $(FILES)
必须是最新的才能生成 images.zip
.
当然,使用通配符源相当“危险”,因为丢失的文件不会被 make
检测到,因此可能会产生“误报”的构建结果。
我正在 gnu make 文档丛林中慢慢奋斗(尽管它非常好 — 只是很多)。
我遇到了模式规则:
%.png: file1 file2
run command here
还有可用作目标的通配符:
FILES = $(wildcard *.png)
现在我可以写了:
$(FILES): file1 file2
run command here
第一个和第二个用例有区别吗?
在%.png
的情况下:如果任何其他规则反过来要求某个文件,该文件本身没有明确的规则,但以.png
结尾,那么该规则将被调用。
因此,%.png: %.jpeg
(例如)说,“除非有更具体的规则,否则这里是如何从 JPEG 转换为 PNG 图像。”
$(FILES)
正在枚举您可能想要创建的依赖项列表。对于规则的目标来说,这并不是真正的事情,而是对于一个人的依赖关系。
例如,像 images.zip: $(FILES)
这样的虚假目标可以用来表示所有 $(FILES)
必须是最新的才能生成 images.zip
.
当然,使用通配符源相当“危险”,因为丢失的文件不会被 make
检测到,因此可能会产生“误报”的构建结果。