无论目标如何,先决条件的模式规则

时间:2018-02-08 22:39:25

标签: makefile gnu-make

我有一个Makefile,我使用Rscript命令使用R脚本制作各种不同的目标。

object.rds: script1.R
    Rscript $<

target.csv: script2.R
    Rscript $<

another.rds: script3.R target.csv object.rds
    Rscript $<

有没有办法定义一个通用规则,以便任何具有匹配%.R模式作为第一个先决条件的文件的配方总是运行Rscript $<?例如,像:

**: %.R **
    Rscript $<

我想我正在寻找的是最后手段规则的 - 即具有任意目标但具有特定先决条件的配方(或者,至少是基于a的一个配方)图案)。

(请注意,这不是R特有的 - 我可以用python,ruby,bash等提出完全相同的问题。)

2 个答案:

答案 0 :(得分:1)

模式规则需要匹配模式,如果您的目标文件名与Rscript文件名没有连接,您可能只需为三个目标提供单个配方并单独指定依赖项

object.rds: script1.R
target.csv: script2.R
another.rds: script3.R target.csv object.rds

object.rds target.csv another.rds:
    Rscript $<

答案 1 :(得分:0)

您可以创建一个中间目标:

 %.R_run: %.R
      Rscript $<

 object.rds: script1.R_run

 target.csv: script2.R_run

 another.rds: script3.R_run target.csv object.rds

这样object.rds取决于script1.R已经运行。