我想使用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中实现这一目标的最佳方法是什么,或者只是不适合这项工作?
提前表示感谢,如果问题不明确,请道歉 - 我是新手,并且几乎不确定如何表达这个问题。
答案 0 :(得分:1)
我想我已经弄明白了。问题出在以下几行:
./generate_dat_from %
这是'%'的非法使用。正确的形式是:
$(datasets): path/to/result/%.dat:
./generate_dat_from $*
其中$ *捕获目标中%匹配的内容。
希望这对其他人有用。