环境中发生的一切都取决于特定的目标 - 可能吗?

时间:2013-06-05 13:11:31

标签: scons

假设我有两个SConscript s:

SConstruct
  SConscript a
  SConscript b

SConscript a生成一个pkg-config文件(对于没有的文件)。我有一个别名(替换,安装等),pkg_aliasSConscript b调用env.ParseConfig(...)并构建app,因此生成文件非常重要(否则pkg-config会抱怨)。

所以我需要的是这样的依赖:app - > parse - > pkg_alias

有可能表达这个吗?

subdir_env.Depends(subdir_env, 'pkg_alias')是尝试subdir_env的人时,与ParseConfig一样。

1 个答案:

答案 0 :(得分:0)

我假设这个

  

app - >解析 - > pkg_alias

表示app依赖于parse,而parse依赖于pkg_alias。

如果您通过Command()构建器调用pkg-config,则SCons将为其创建可用于依赖项的目标。问题是我不认为你可以使ParseConfig()依赖于pkg-config目标,因为ParseConfig()在构建任何目标之前执行。实际上,在构建任何目标之前,会对SConstruct和所有SConscript进行评估。

相反,您可以直接通过Python调用pkg-config而无需使用Command()构建器,然后在构建目标之前调用ParseConfig()。然后应用程序将根据环境中的内容构建。

以防万一,您可以按照以下方式获取所有内容:

使用SConscript()函数调用SConscript。执行此操作时,可以在SConstruct中创建环境并将其导出到SConscripts,如下所示:

SConstruct

env = Environment()
SConscript('suba/SConscript', exports='env', duplicate=0)
SConscript('subb/SConscript', exports='env', duplicate=0)

SUBA / Sconscript

Import('env')

然后,您在任何脚本中执行的任何操作都将在同一环境中完成。