我应该使用环境来调用SConscript()吗?

时间:2014-10-02 03:39:53

标签: scons

这些之间有什么区别?

SConscript('subdir/SConscript')
env.SConscript('subdir/SConscript')

我最初想知道这是否影响了被调用的SConscript的DefaultEnvironment,所以我尝试了这个实验:

SConstruct:

env = Environment(CC='my_cc')
SConscript('SConscript', exports={'program':'p1.c'})
env.SConscript('SConscript', exports={'program':'p2.c'})

SConscript:

Import('program')
Program(program)

结果:

$ scons -n -Q
gcc -o p1.o -c p1.c
gcc -o p1 p1.o
gcc -o p2.o -c p2.c
gcc -o p2 p2.o

但是,正如您所看到的,SConscript中使用的构造环境似乎没有受到影响。

1 个答案:

答案 0 :(得分:1)

如果你只是写:

Program('main','main.cpp')

SCons将使用所谓的" DefaultEnvironment"内部。它是为人们添加的,比如在生物信息学中开始开发人员,他们不需要使用特殊环境设置......或者在他们的构建中没有多个不同的环境。

它使得打字变得不那么冗长,但是你仍然坚持使用一个环境。但是,人们可以随时自由地将DefaultEnvironment与自定义的环境混合在一起......这只是一种品味问题。

但值得注意的是,DefaultEnvironment和其他环境自动关联或连接,与其设置有关。 最后,还可以使用以下命令直接访问DefaultEnvironment:

import SCons.DefaultEnvironment
SCons.DefaultEnvironment(tools=[])

env = Environment(...)

这可以阻止SCons在系统中搜索工具/应用程序两次...一次用于DefaultEnv,一次用于您的特殊环境。 在内部,像" Program()"只是" SCons.DefaultEnvironment.Program()" ...的所有包装。

基于以上所有内容,SConscript()方法在任何环境中都可用...并且使用简单的

包含其他构建规范文件应始终是安全的
SConscript('...')

,这也是我个人喜欢的方法。