如何将.png列表转换为makefile中的pdf列表?

时间:2013-12-27 19:21:19

标签: c++ makefile

我想循环遍历.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.

1 个答案:

答案 0 :(得分:2)

问题是你正试图在食谱中使用$(wildcard ...)。 Make将始终展开配方内的所有变量,然后启动将运行配方的shell,并且在for循环启动之前没有.pdf个文件,因此通配符函数扩展为空。这为convert提供了非法的命令行。

此外,如果他们的编号为0099,我看不出你有1000张图片(你的通配符只匹配两个字符 - 也许他们也使用字母?)

但是,为什么你甚至在这里使用makefile?你只有一个目标,它运行一个命令(for循环)。为什么不编写shell脚本而不是makefile?

如果你想这样做“制作方式”,每次修改.png文件时,只有那个,图像被转换为​​.pdf,那么你必须做类似的事情这样:

CONVERTFLAGS := -resize 80%

PICLIST := $(wildcard pic??.png)
PDFLIST := $(PICLIST:%.png=%.pdf)

all: $(PDFLIST)

%.pdf : %.png
        convert $(CONVERTFLAGS) $< $@