2016-06-25 3 views
1

Я хочу использовать сделать для преобразования изображений в нужном формате для книги, которую я пишу. Входные изображения находятся в каталоге 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 $< [email protected] 

Это то, что у меня есть до сих пор, оно работает только для входов SVG. Как я могу собрать все файлы из каталога figure независимо от расширения файла и применять различные правила в зависимости от расширения файла?

ответ

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 $< [email protected] 
output/%.png: figure/%.jpg 
    # blah 
+0

Большое спасибо, это уже работает для меня. Возможно ли поддерживать изображения, вложенные в подпапки «фигуры»? – danijar

+0

@ danijar Конечно, просто измените шаблон шаблона. – user657267

+0

Как мне сделать это, чтобы glob файлы любой глубины вложенности в этой папке? – danijar