【发布时间】:2014-04-11 23:59:48
【问题描述】:
假设我有一个 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,则错误会表面。
在 GNU make 中有没有办法做到这一点?
【问题讨论】:
-
make b.out(在一个干净的目录中)将非常可靠地失败。解决方案 (b.out: a.out) 将解决c.out故障。那么有什么问题呢? -
@Beta 问题是什么:如何以更高的概率找到那些错误,以便
make -j不会给出 schrödinbugs。 -
OP 问题最好表述为“如何发现 GNU
make中目标的依赖关系之间未说明的依赖关系?”
标签: gnu-make