1

我想使用 make 作为可重复研究的工具。这项研究涉及一个很长的管道,我将为许多独立的数据集运行它,需要一个我将在“pseudo-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 手册对静态模式规则的语法有这样的说法:

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

这就解释了为什么上面的代码不起作用。在 make 中完成此任务的最佳方法是什么,或者 make 根本不是这项工作的正确工具?

在此先感谢,如果问题提出不当,我深表歉意——我是新手,几乎不知道如何表达这个问题。

4

1 回答 1

1

我想我已经想通了。问题出在以下行:

./generate_dat_from %

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

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

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

希望这对其他人有用。

于 2013-08-21T16:09:44.957 回答