具有部分依赖性的模式规则

Pattern rule with partial dependency

我有一个 makefile 和一堆 .R 脚本,这些脚本创建 .csv 文件作为输出。然后将这些文件用于 python 模拟。

all: $(FILES)
  python simulation.py

$(FILES): %.csv: %.R 
  Rscript $<

这很简单。我的问题是 .R 脚本中有一个(而且只有一个)有自己的依赖关系,比如 sourcedata。似乎将这种依赖项放在模式中会很烦人

all: $(FILES)
  python simulation.py

$(FILES): %.csv: %.R sourcedata
  Rscript $<

sourcedata:
  wget "sourcedata.zip"

但是像 all: sourcedata $(FILES) 那样做并依赖操作顺序会 be less effective。我想我也可以给那个 R 文件自己的假规则

problem_script.R: sourcedata
  @echo R script read

但我无法测试这是否有效。是否有既定的方法来做到这一点?

除非我误解了,否则您需要指定每当 R 文件 时需要重建特定的 CSV 文件sourcedata 文件更改,对吗?

如果是这样,只需添加:

problem_script.csv: sourcedata

(不需要食谱)。这声明了该特定 CSV 文件的额外先决条件,因此只要它相对于 sourcedata 过时,它将被重建。