虽然您的问题可能有所不同,但我清楚地看到了一个。
同时处理规则中所有命令的整个文本,以便扩展 make 的函数和变量。假设您在目录中没有.png
文件,并且您调用 make 所以它应该重新生成它们:a.png
和b.png
. 然后,在您调用 make 之后,规则的文本实际上将如下所示:
file.html:
./generate-images.py > file.html
make
因为在读取 makefile 的那一刻没有.png
文件!第一行执行后,文件会出现,但下一行已经生成为“make”。
只有当您第二次调用您的 makefile 时,它才会扩展为
file.html:
./generate-images.py > file.html
make a.gif b.gif
这不是你想要的。所以我建议以正确的方式来做。
# If you have batch conversion program, this may be helpful
images.stamp: *.png
convert_all_images $?
touch images.stamp
# OR, if you want convert one-by-one with means of make
images.stamp: $(wildcard *.png)
touch images.stamp
%.gif: %.png
convert_one --from=$^ --to=$@
# HTML would look like
%.html:
./generate-images.py > $@
make images.stamp
因此,当您调用 时make all
,它会生成 html 并转换新生成的图像。请注意,它只会转换已更新的图像,这是您想要的。
感谢Beta指出 gif/png 扩展的混乱。