【问题标题】:using python module in scons在 scons 中使用 python 模块
【发布时间】:2015-12-01 16:19:10
【问题描述】:

我正在尝试为我的构建环境使用 scons,目录结构类似于:

main_dir
main_dir/dir_A
main_dir/dir_B
main_dir/dir_C
main_dir/dirB/dir_b1
main_dir/dirB/dir_b2
main_dir/dirB/dir_b3

我在 main_dir 中有 SConstruct 文件,在后续目录中有相应的 SConscript。 在 dir_b1、dir_b2 和 dir_b3 中,大部分构建环境设置是常见的,所以我试图导入一个通用的 python 模块来做所有这些事情,这就是两难境地。 让我们说 dir_b1,目前我这样做:

Import('my_env')
env = my_env.Clone()
env['ENV']['LIB_NAME'] = xxx    #unique to each dir
env['ENV']['CXX_COMPILER'] = 'yyy' #common to all

我想将所有这些常见的东西移到我的 python 模块中,并将目录中的任何特定内容留给 SConscript 文件。

这里应该如何管理环境变量?

如果我也在 python 模块中克隆 env 变量并在模块和 SConscript 中设置值,那么在构建时,scons 会采用这两者的变化吗?

【问题讨论】:

    标签: python scons


    【解决方案1】:

    在第一个“解析”阶段读取 SConstructs/SConscripts 中 SCons 的构建描述。在这个阶段,SCons 收集有关要构建哪些节点以及为此使用哪些环境的所有信息。 环境的行为与字典 (=map) 非常相似,因为它支持通过每个键设置某些值。对于上面示例中的“my_env”这样的单一环境,这并不重要。关于最终“构建”阶段中的操作,对环境的分配与它们是否发生在您的顶级 SConstruct 或某个深埋子目录中的某些 SConscript 无关。如果分配给同一个键,最后一个分配获胜。 只有在“解析”阶段完成后,才会开始真正的“构建”。

    最后,也是最重要的一点,“构建”不遵循您在 SConstructs/SConscripts 中给出的定义顺序,它遵循您定义的目标文件和源文件之间的依赖关系。

    因此,您应该能够在顶级 SConstruct 中设置您的公共变量,然后将此环境传递给您可以在其中 Clone 它们的 SConscripts,并添加/更改此 cloned 环境的其他值,如果必填。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2015-02-19
      • 2016-04-23
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2021-03-07
      相关资源
      最近更新 更多