Makefile 如何根据输入扩展为同一目标设置不同的规则?
我想使用make将图像转换为我正在写的书的正确格式。输入图像位于Makefile 如何根据输入扩展为同一目标设置不同的规则?,makefile,Makefile,我想使用make将图像转换为我正在写的书的正确格式。输入图像位于图目录中,可以具有不同的文件格式,例如PNG、SVG或JPG。根据文件扩展名,我希望运行不同的转换命令。结果应输入输出,并且始终为PNG类型 FIGURES := $(patsubst figure/%.svg,output/%.png,$(wildcard figure/*.svg)) figures: $(FIGURES) output/%.png: figure/%.svg convert -density 600
图
目录中,可以具有不同的文件格式,例如PNG、SVG或JPG。根据文件扩展名,我希望运行不同的转换命令。结果应输入输出
,并且始终为PNG类型
FIGURES := $(patsubst figure/%.svg,output/%.png,$(wildcard figure/*.svg))
figures: $(FIGURES)
output/%.png: figure/%.svg
convert -density 600 -background none -resize 2500x $< $@
FIGURES:=$(patsubst FIGURES/%.svg,output/%.png,$(通配符FIGURES/*.svg))
数字:$(数字)
输出/%.png:figure/%.svg
转换-密度600-背景无-调整大小2500x$<$@
这就是我到目前为止所做的,它只适用于SVG输入。如何从图
目录中收集所有文件,而不考虑文件扩展名,并根据文件扩展名应用不同的规则
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
sources:=$(通配符$(addprefix figure/*,.png.svg.jpg))
目标:=$(patsubst figure/%,output/%.png,$(basename$(sources)))
冒牌货:全部
全部:$(目标)
输出/%.png:图/%.png
#随便
输出/%.png:figure/%.svg
转换-密度600-背景无-调整大小2500x$<$@
输出/%.png:figure/%.jpg
#废话
非常感谢,这已经适用于我了。是否也可以将受支持的图像嵌套在图的子文件夹中?@danijar当然可以,只需更改通配符模式。如何将该文件夹中任何嵌套深度的文件进行全局搜索?@danijar搜索“gnu make recursive wildcard”,之前已经回答过多次。