【问题标题】:How to debug parallel scons builts如何调试并行 scons 构建
【发布时间】:2014-05-15 02:58:18
【问题描述】:

我有一个相当复杂的 SConstruct 文件并进行了设置,因此在此处粘贴它是不切实际的。当我运行 scons -j 8 时,构建失败并出现一些 C++ 错误。但是,当我只使用 scons 运行相同的干净构建(因此,没有并行构建)时,编译完成得很好。我认为我有一些依赖问题,只有在并行编译代码时才会出现。构建需要很长时间,所以我想解决这个问题。

如何调试 scons 以便它告诉我问题出在哪里?

【问题讨论】:

  • 您遇到什么错误?如果它与目录路径或不存在的文件有关,我曾经遇到过类似的错误,可以提供解决方案。
  • @Brady:有时是的。我们的一些代码相互依赖,并使用 scons 来计算以什么顺序编译什么。当 scons 并行运行时,其中一些顺序会变得混乱。至少,这是我怀疑的......

标签: scons


【解决方案1】:

我最近在工作中的构建系统中遇到了类似的问题。我遇到的第一个问题很奇怪,因为 SCons 似乎完全弄乱了它应该在的目录。在查阅 SCons 用户的邮件列表后,我被告知你不能使用 os.system('cd ...') 或类似的方式更改目录同时构建。我没有做类似的事情,但经过进一步检查发现我在自定义构建器中使用的 Python shutil.make_archive() 函数确实在更改目录。当我改变它时,并行构建工作得更好。因此,如果您有任何自定义构建器等,请确保它们不会更改目录。

我仍然有问题,类似于你的依赖系统在并行构建时似乎没有正常工作。后来我意识到这是我的错,因为依赖项不像我最初预期的那样。您可以使用scons --debug=tree 命令行选项来帮助调试依赖项。

我最初认为 SCons 在其并行构建系统中存在错误,但后来发现它实际上非常健壮,而且我在构建脚本中遇到的错误完全可以理解为并行构建会中断。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多