如何根据输入扩展名为同一目标设置不同的规则?

时间:2016-06-25 12:56:27

标签: makefile

我想使用 make 将图像转换为我正在编写的书的正确格式。输入图像位于figure目录中,并且可以具有不同的文件格式,例如PNG,SVG或JPG。根据文件扩展名,我想运行不同的转换命令。结果应该位于output,并且始终为PNG类型。

FIGURES := $(patsubst figure/%.svg,output/%.png,$(wildcard figure/*.svg))

figures: $(FIGURES)

output/%.png: figure/%.svg
    convert -density 600 -background none -resize 2500x $< $@

这是我到目前为止,它只适用于SVG输入。如何从figure目录收集所有文件而不管文件扩展名如何,并根据文件扩展名应用不同的规则?

1 个答案:

答案 0 :(得分:1)

这样的东西
sources := $(wildcard $(addprefix figure/*,.png .svg .jpg))
targets := $(patsubst figure/%, output/%.png, $(basename $(sources)))

.PHONY: all
all: $(targets)

output/%.png: figure/%.png
    # whatever
output/%.png: figure/%.svg
    convert -density 600 -background none -resize 2500x $< $@
output/%.png: figure/%.jpg
    # blah