2016-06-14 110 views
0

我有一个scons项目与子目录中的许多SConscript文件。在其中一个SConscript文件中,我想检查构建主机上是否安装了特定的库。下面是代码片段:SCons:奇怪的配置()在SConscript失败

Import("env") 

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

env.Library(...) 

当我执行建立scons的失败,strnge错误没有错误消息是这样的:

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

3号线是我称之为配置()。我想我正在做一些Configure()函数不允许的事情,但我在scons文档中找不到任何解释。

请帮我调试一下。

+0

那么,你要做的第一件事是排除你的例子和错误描述的副作用。这意味着,只尝试运行似乎单独失败的SConscript,并在所有其他地方注释“SConscript”的调用。如果这仍然显示所描述的错误,请在顶层构建文件中用简单的'env = Environment'替换'env'设置。如果错误仍然显示,那么请在这里发布完整的顶级SConstruct和被称为SConscript的...然后我们可以从那里获取它。 – dirkbaechle

+0

有没有config.log?如果是这样,请发布它的内容 – bdbaddog

+0

我有解决这个问题。将在几个小时后发布。 (config.log没有相关信息)。 –

回答

0

所以问题出在兄弟SConscript文件之一。有一个电话Configure(env),但配置对象没有配置与conf.Finish()呼叫。

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

因此,当我拨打电话给Configure(env) SCons抛出一个异常,因为它看到有另一个活动的配置对象被兄弟SConscript孤立。