SCons用户指南讲述了Multiple Construction Environments用于构建单个程序的多个版本的用法,并给出了以下示例:
opt = Environment(CCFLAGS = '-O2')
dbg = Environment(CCFLAGS = '-g')
o = opt.Object('foo-opt', 'foo.c')
opt.Program(o)
d = dbg.Object('foo-dbg', 'foo.c')
dbg.Program(d)
而不是手动为使用不同环境编译的对象分配不同的名称,VariantDir()
/ variant_dir
听起来像是一个更好的解决方案......
但是如果我将Program()
构建器放在SConscript中:
Import('env')
env.Program('foo.c')
如何将不同的环境导出到同一个SConscript文件?
opt = Environment(CCFLAGS = '-O2')
dbg = Environment(CCFLAGS = '-g')
SConscript('SConscript', 'opt', variant_dir='release') #'opt' --> 'env'???
SConscript('SConscript', 'dbg', variant_dir='debug') #'dbg' --> 'env'???
不幸的是,SCons Wiki中的讨论并未对此主题带来更多见解。
感谢您的投入!
答案 0 :(得分:4)
SConscript是在环境本身上定义的方法:
for dir, env in (('release', opt), ('debug', dbg)):
env.SConscript('SConscript', 'env', variant_dir=dir)
然后从SConscript中你可以:
Import('env')
答案 1 :(得分:2)
或者,您可以将字典作为导出arg传递给SConscript。键是SConscript用于导入它的名称,值是SConstruct中的对象。所以:
SConscript('SConscript', exports={'env': dbg}, variant_dir='debug')
SConscript('SConscript', exports={'env': opt}, variant_dir='release')
然后在SConscript Import('env')
中第一次获得dbg
,第二次获得opt
。这也适用于导出/导入您喜欢的任何其他内容,而不仅仅是环境。
有关详细信息,请参见手册页中的Export()和SConscript()。