Make中静态模式规则的语法有多灵活?

时间:2013-08-21 15:38:02

标签: makefile reproducible-research

我想使用make作为可重复研究的工具。这项研究涉及一个很长的管道,我将为许多独立的数据集运行,需要我将在“伪制造”中描述的工作流程如下:

datasets = foo bar baz

$(datasets): path/to/result/%.dat: 
    ./generate_dat_from %

$(datasets): path/to/figs/%.png: path/to/result/%.dat
    ./generate_png_from_dat path/to/result/%.dat

[etc.]

如果make只是将每个数据集的名称替换为'%',那么这正是我想要的。但是,GNU make手册可以说明the syntax of static pattern rules

  

当目标模式与目标匹配时,'%'可以匹配目标名称的任何部分;这部分称为茎。模式的其余部分必须完全匹配。

这解释了为什么上面描述的代码不起作用。在make中实现这一目标的最佳方法是什么,或者只是不适合这项工作?

提前表示感谢,如果问题不明确,请道歉 - 我是新手,并且几乎不确定如何表达这个问题。

1 个答案:

答案 0 :(得分:1)

我想我已经弄明白了。问题出在以下几行:

./generate_dat_from %

这是'%'的非法使用。正确的形式是:

$(datasets): path/to/result/%.dat: 
./generate_dat_from $*

其中$ *捕获目标中%匹配的内容。

希望这对其他人有用。