我有一个相当复杂的SConstruct文件并进行设置,所以在这里粘贴它是不切实际的。当我运行scons -j 8
时,构建失败并出现一些C ++错误。但是,当我使用scons
运行相同的干净构建(因此,没有并行构建)时,编译就完成了。我认为我有一些依赖性问题,只有在并行编译代码时才出现。构建需要很长时间,所以我想解决这个问题。
如何调试scons以便它告诉我问题所在?
答案 0 :(得分:2)
我最近在构建系统中遇到了类似的问题。我遇到的第一个问题非常奇怪,因为看起来SCons完全搞乱了它应该在的目录。在咨询SCons用户的邮件列表后,我被告知你不能用os.system('cd ...')
更改目录,或类似的并行建设。我没有做过这样的事情,但经过进一步的检查发现我在自定义构建器中使用的Python shutil.make_archive()
函数确实在改变目录。当我改变它时,并行构建工作得更好。因此,如果您有任何自定义构建器等,请确保它们不会更改目录。
我仍然遇到了问题,类似于你的问题,依赖系统在并行构建时似乎没有正常工作。我后来意识到这是我的错,因为依赖关系并不像我原先预期的那样。您可以使用scons --debug=tree
命令行选项来帮助调试依赖项。
我原本以为SCons在其并行构建系统中存在错误,但后来发现它实际上非常强大,而且我在构建脚本中遇到的错误完全意味着并行构建会破坏。