Unix Make:创建多个文件的脚本

Unix Make:创建多个文件的脚本,unix,makefile,Unix,Makefile,我刚开始尝试使用make进行数据分析管道,但遇到了一个障碍。我的大多数脚本都有一个输入文件和一个输出文件,这使得创建规则非常容易。然而,有些人创建了几个输出文件,这就给我在了解make如何工作方面带来了问题。例如 all: results/list.txt \ results/stats.txt \ results/image.png .PHONY: all results/list.txt results/stats.txt results/image

我刚开始尝试使用
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
看到它需要构建所有三个文件,然后调用脚本三次,因为它认为它需要为每个文件单独调用


我做错了什么?我怎样才能让它只运行一次?是否有一些聪明的方法可以为具有多个输出的脚本创建规则?

也许可以添加一些其他虚假目标:

 .PHONY: all doresults
使用运行测试的规则:

 doresults: analysis.R data.txt
     $^ results/ -c blue,red -p 


或考虑使用一些时间戳文件…

使用> x和/或<代码> -Test-Trace>代码文件调试.Mag文件。在这种情况下,时间戳文件可能更容易解决问题。使用时间戳文件工作太好了!将
results/.timestamp
添加到
all
,并将
touch results/.timestamp
添加到分析规则中。谢谢别忘了用
makeclean
删除时间戳,并让
clean
也成为一些
虚假的目标
 all: doresults