我正在尝试使用linux实用程序make
是的,我意识到在shell / python脚本中执行此操作非常简单,但我正在尝试学习如何在此上下文中使用make来更智能地完成工作。
我当前的make文件看起来像这样但是存在很大缺陷:
movie: data *.png
ffmpeg data_%d.png output.mp4
%.png: %.txt
python plot.py $< $@
data:
python make_data.py
答案 0 :(得分:3)
你有几个问题,所以让我们把它们按顺序排好。 (注意事项:我使用GNUMake,所以我不能保证我的解决方案可以与其他版本一起使用,而且我对ffmpeg不熟悉。)
.PHONY: data您可以单独测试此规则:“make data”。
dfiles = $(wildcard *.txt) images = $(dfiles:txt=png)如果数据文件已经存在(并且您可以在“生成数据”之后对其进行测试),这将起作用,但是当我们第一次运行make时,数据文件不存在。有几种方法可以解决这个问题;最简单的方法是在数据文件生成后,在规则内第二次运行:
$(MAKE) output.mp4
总而言之,我们得到这样的结论:
.PHONY: movie movie: data @$(MAKE) -s output.mp4 # I added the "@" and "-s" to make it quieter. dfiles = $(wildcard *.txt) images = $(dfiles:txt=png) output.mp4: $(images) ffmpeg data_%d.png $@ %.png: %.txt python plot.py $< $@ .PHONY: data data: python make_data.py
(请注意,有些人喜欢将所有PHONY声明放在一起:“。PHONY:电影数据”。我更喜欢这样做。)