Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 如何根据输入扩展为同一目标设置不同的规则?_Makefile - Fatal编程技术网

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

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

我想使用make将图像转换为我正在写的书的正确格式。输入图像位于
目录中,可以具有不同的文件格式,例如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”,之前已经回答过多次。