我有一个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等提出完全相同的问题。)
答案 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
已经运行。