C++ 如何在makefile中将.png列表转换为pdf列表?

C++ 如何在makefile中将.png列表转换为pdf列表?,c++,makefile,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

我想循环浏览.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.

问题是您试图在配方中使用
$(通配符…
)。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) $< $@
CONVERTFLAGS:=-调整大小80%
PICLIST:=$(通配符pic???.png)
PDFLIST:=$(图片列表:%.png=%.pdf)
全部:$(PDFLIST)
%.pdf:%.png
转换$(CONVERTFLAGS)$<$@

这个问题没用。这就像说“我今天想发动我的车,但我不能”;有人应该如何回应?你是如何“使用”它的?您遇到了什么错误?请再次检查如果您尝试手动转换-调整80%pic01.png大小会发生什么情况?我想将1000张图片转换为pdf文件。这就是我想使用循环或列表的原因。Beta要求您自己在一个文件上尝试该命令,以查看结果。如果您不知道从shell提示符运行自己的正确命令是什么,那么您就不知道如何让make为您运行该命令。太棒了@madscitifist!这就是我想要的:)谢谢。。。你是对的,我不能有1000张照片,我必须用通配符来表示三个字符!如果这回答了您的问题,请单击旁边的复选标记接受,因此它被标记为已回答的问题。