我想循环遍历.png文件列表并将它们转换为相应的pdf文件:
PICLIST = $(sort $(wildcard pic??.png))
all:
for i in $(PICLIST) ; do \
convert -resize 80% $$i $(wildcard pic??.pdf) ; \
done
但我得到了一些错误如下:
for i in pic01.png pic02.png pic03.png ; do \
convert -resize 80% $i ; \
done
convert: no images defined `pic01.png' @ error/convert.c/ConvertImageCommand/3145.
答案 0 :(得分:2)
问题是你正试图在食谱中使用$(wildcard ...)
。 Make将始终展开配方内的所有变量,然后启动将运行配方的shell,并且在for循环启动之前没有.pdf
个文件,因此通配符函数扩展为空。这为convert
提供了非法的命令行。
此外,如果他们的编号为00
到99
,我看不出你有1000张图片(你的通配符只匹配两个字符 - 也许他们也使用字母?)
但是,为什么你甚至在这里使用makefile?你只有一个目标,它运行一个命令(for循环)。为什么不编写shell脚本而不是makefile?
如果你想这样做“制作方式”,每次修改.png
文件时,只有那个,图像被转换为.pdf
,那么你必须做类似的事情这样:
CONVERTFLAGS := -resize 80%
PICLIST := $(wildcard pic??.png)
PDFLIST := $(PICLIST:%.png=%.pdf)
all: $(PDFLIST)
%.pdf : %.png
convert $(CONVERTFLAGS) $< $@