通过更改执行顺序触发(并行)GNU make中缺少的依赖项

时间:2012-02-24 20:20:03

标签: gnu-make

假设我有一个Makefile:

a.out:
    sleep 3
    touch a.out a1

b.out:
    cat a1 > b.out

c.out: a.out b.out
    cat a.out b.out > c.out

make c.out 通常成功,因为a.out的命令在b.out的命令之前执行。但make b.out将失败(在干净的目录中),make -j c.out也会失败。

在现实场景中,很少有sleep 3因此只会非常随机地显示错误,我正在寻找一种方法以更高的概率抽出这些错误。一个想法是反转“在同一级别上”目标的执行顺序:因为测试套件通常会触发第一代a.out,然后是b.out,如果先生成b.out,那么bug就会表面上。

GNU make有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

保罗·史密斯在help-make@gnu.org上回答说,目前的GNU make是不可能的。

答案 1 :(得分:0)

最有可能揭示目标依赖关系之间未声明的依赖关系的目标依赖关系的单一重新排序是目标依赖关系的反向排序

您可以通过使用有条件执行的依赖项部分测试Makefile来实现反向排序,例如:

a.out: b.out

对于较长的依赖列表,这将是:

a.out: b.out
b.out: d.out
d.out: e.out
:
: