【问题标题】:SCons: misterious Configure() failure in SConscriptSCons:SConscript 中神秘的 Configure() 失败
【发布时间】:2016-06-16 01:34:21
【问题描述】:

我有一个 scons 项目,其子目录中有许多 SConscript 文件。在其中一个 SConscript 文件中,我想检查特定库是否安装在构建主机上。这是代码sn-p:

Import("env")

conf = Configure(env)
if conf.CheckLibWithHeader(...):
    doSomething()

env.Library(...)

当我执行 build scons 失败并出现 strnge 错误时,没有如下错误消息:

scons: *** 
File "/path/to/SConscript", line 3, in <module>

第 3 行是我调用 Configure() 的地方。我想我在做 Configure() 函数不允许的事情,但我在 scons 文档中找不到任何解释。

请帮我调试一下。

【问题讨论】:

  • 嗯,您要做的第一件事就是从示例和错误描述中排除副作用。这意味着,尝试仅运行似乎单独失败的 SConscript,并在所有其他地方注释掉 SConscript 的调用。如果这仍然显示所描述的错误,请将您的 env 设置替换为顶级构建文件中的简单 env = Environment。如果错误仍然显示,请在此处发布您的完整顶级 SConstruct 和调用的 SConscript...然后我们可以从那里获取它。
  • 有 config.log 吗?如果是这样,请发布它的内容
  • 我有这个问题的解决方案。几个小时后会在这里发布。 (config.log 没有相关信息)。

标签: scons


【解决方案1】:

所以问题出在同级 SConscript 文件之一中。调用了Configure(env),但配置对象未通过conf.Finish() 调用处理。

这是一个问题,因为 SCons 不允许在任何时候创建多个配置对象。我通过分析 SCons 来源发现了这条规则——我不知道这是否被记录在案。

因此,当我调用Configure(env) SCons 时抛出异常,因为它看到另一个活动配置对象被同级 SConscript 孤立。

【讨论】: