GNU可以在并行构建时创建损坏的二进制文件吗?

时间:2015-03-03 17:17:19

标签: makefile gnu-parallel

我正在一个项目中工作,我们刚刚使用GNU Make为我们的构建系统添加了并行性。

我们并行构建库和程序。

首先,我们构建二进制文件所需的所有库。创建库后,我们开始构建二进制文件。

现在,在运行我们的程序时,我们发现其中一个二进制文件没有按预期运行。 GNU Make可能会在并行构建时导致二进制文件损坏但仍能正确链接吗?如果是这样,那么常见原因是什么以及如何避免它?

1 个答案:

答案 0 :(得分:3)

正确的并行构建取决于正确的makefile。如果构建是串行但不是并行工作,这意味着你的makefile没有声明它需要的所有先决条件,所以make没有意识到在目标Y完成之前它不能构建目标X.

然而,不太可能这些错误会使构建成功:也就是说,如果事情以错误的顺序构建,编译器或链接器几乎总会失败。我很难想象构建会如何成功,除非是最纯粹的机会,如果有的话(也许你的工具会覆盖现有文件而不是删除它并从头开始编写)。当然,你没有提供关于“不按预期运行”的含义的信息,因此很难确定。

要调查您需要进行一些测试:每次进行并行构建时,它是否会以相同的方式失败?即使您使用不同数量的并行(不同-j级别),它是否会失败?如果切换回非并行构建,它会继续失败吗?即使您从一个完全干净的工作区(没有构建)开始,构建是否会以-j成功?