有什么时候可以安全地要求make做多个工作吗?
我问,因为在过去,它通常似乎对我很好,但最近它一直在引起麻烦。
我做了一个“make -j8”(使用八个工作来加速建筑)并不断获得:
“.so文件格式无法识别”正在生成的其中一个共享库上。这甚至在清除了共享库之后(make clean成功删除了它,但是一旦我也做了不必要的步骤,手动删除它)并重新开始。
在看到问题之后,我现在对使用多个工作感到谨慎。是否有一些方法可以提前告知多个作业是否可以与make一起使用?
这完全取决于您的Makefile中依赖关系的布局。您必须非常小心并指定每个依赖项,而不仅仅依赖于行顺序和巧合。
我有过这样的情况:make -j2
的输出工作得很好,但make -j4
没有,因为有一个项目在它应该之前编译,但我没有足够仔细地指定它。同样,我有make -j4
似乎工作,只是发现某些部分正在编译陈旧的代码,这意味着最终产品将不同于我的预期。在我发现依赖性问题之前我必须确保make clean
在任何构建之前允许我再次安全地使用make -j4
。
让我回答你的每个问题:
不在我的书中。如果您的依赖项完全正确,那么您就可以了。否则,要小心。
我认为答案与前一项相同。我通常认为它会工作,直到我知道它没有,然后我试图找到问题。然而,这可能不是一种安全的工作方式。如果您注意到意外结果,请在不使用多个作业的情况下使用make clean
然后使用make
,看看是否能解决问题。如果是这样,您可以合理地假设您的Makefile的依赖关系不正确。
您还有关于.so file format not recognized
问题的隐含问题。这听起来像是同一个问题。具体来说,也许.so正在构建错误的依赖关系,或错误的.so在找到或构建正确的一个之前被拉入,或者.so在被调用时是一个不完整的状态。