假设我有一个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有没有办法做到这一点?
答案 0 :(得分:2)
答案 1 :(得分:0)
最有可能揭示目标依赖关系之间未声明的依赖关系的目标依赖关系的单一重新排序是目标依赖关系的反向排序。
您可以通过使用有条件执行的依赖项部分测试Makefile
来实现反向排序,例如:
a.out: b.out
对于较长的依赖列表,这将是:
a.out: b.out
b.out: d.out
d.out: e.out
:
: