我刚开始尝试将make
用于我的数据分析管道,但我遇到了麻烦。我的大多数脚本都有一个输入文件和一个输出文件,这使得创建规则变得非常容易。但是,有些文件会创建几个输出文件,这会产生我知道make
如何工作的程度。例如......
all: results/list.txt \
results/stats.txt \
results/image.png
.PHONY: all
results/list.txt results/stats.txt results/image.png: analysis.R data.txt
$^ results/ -c blue,red -p
...其中analysis.R
获取目录并输出名为的三个文件。虽然上面的recepe工作正常并输出三个文件,但脚本运行三次,而不是一次。我认为make
看到它需要构建所有三个文件,然后调用脚本三次,因为它认为它需要为每个文件单独调用。
我做错了什么,怎么才让它只运行一次?是否有一些聪明的方法为具有多个输出的脚本创建规则?
答案 0 :(得分:1)
也许添加一些其他虚假的目标:
.PHONY: all doresults
运行测试的规则:
doresults: analysis.R data.txt
$^ results/ -c blue,red -p
和
all: doresults
或考虑使用一些时间戳文件....