同一配方的多个隐式(或模式)规则
multiple implicit (or pattern) rules for the same recipe
我有一个命令可以接受多种类型的输入文件并生成相关输出。 IT 所做的事情类似于从图像生成缩略图。我想写一次食谱并有一个隐式规则列表,每个规则都调用食谱,例如:
%.png : %.jpg
%.png : %.jpeg
%.png : %.svg
%.png : %.gif
convert $< -resize 100x100 $@
这适用于 .gif
但对于其他文件类型我得到 "No rule to make target".
有没有办法在不复制食谱的情况下表达这套规则?
您可以添加一个没有先决条件的规则:
%.png : %.jpg
%.png : %.jpeg
%.png : %.svg
%.png : %.gif
%.png :
convert $< -resize 100x100 $@
缺点 是,如果您在 none 的先决条件存在时尝试构建 foo.png
, Make 将勇敢地尝试在没有输入文件的情况下构建它。您可以在配方中进行测试,以在这种情况下获得更优雅的退出,但它不会很优雅。
以下内容应该接近您的要求:
PICTURES := $(wildcard *.jpg *.jpeg *.svg *.gif)
THUMBNAILS := $(addsuffix .png,$(basename $(PICTURES)))
.PHONY: all
all: $(THUMBNAILS)
$(THUMBNAILS):
convert $< -resize 100x100 $@
%.png: %.jpg
%.png: %.jpeg
%.png: %.svg
%.png: %.gif
我有一个命令可以接受多种类型的输入文件并生成相关输出。 IT 所做的事情类似于从图像生成缩略图。我想写一次食谱并有一个隐式规则列表,每个规则都调用食谱,例如:
%.png : %.jpg
%.png : %.jpeg
%.png : %.svg
%.png : %.gif
convert $< -resize 100x100 $@
这适用于 .gif
但对于其他文件类型我得到 "No rule to make target".
有没有办法在不复制食谱的情况下表达这套规则?
您可以添加一个没有先决条件的规则:
%.png : %.jpg
%.png : %.jpeg
%.png : %.svg
%.png : %.gif
%.png :
convert $< -resize 100x100 $@
缺点 是,如果您在 none 的先决条件存在时尝试构建 foo.png
, Make 将勇敢地尝试在没有输入文件的情况下构建它。您可以在配方中进行测试,以在这种情况下获得更优雅的退出,但它不会很优雅。
以下内容应该接近您的要求:
PICTURES := $(wildcard *.jpg *.jpeg *.svg *.gif)
THUMBNAILS := $(addsuffix .png,$(basename $(PICTURES)))
.PHONY: all
all: $(THUMBNAILS)
$(THUMBNAILS):
convert $< -resize 100x100 $@
%.png: %.jpg
%.png: %.jpeg
%.png: %.svg
%.png: %.gif