这些之间有什么区别?
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
中使用的构造环境似乎没有受到影响。
答案 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('...')
,这也是我个人喜欢的方法。