Руководство пользователя SCons говорит об использовании Нескольких Сред Конструкции для создания, создают несколько версий единственной программы, и дает следующий пример:
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'???
К сожалению, обсуждение в Wiki SCons не приносит больше понимания к этой теме.
Спасибо за Ваш вход!
SConscript - это метод, определенный в самой среде:
for dir, env in (('release', opt), ('debug', dbg)):
env.SConscript('SConscript', 'env', variant_dir=dir)
А затем из SConscript вы можете:
Import('env')
Как вариант, вы можете передать словарь в качестве аргумента экспорта в SConscript. Ключи - это имя, которое SConscript будет использовать для его импорта, а значения - это объекты в SConstruct. Итак:
SConscript('SConscript', exports={'env': dbg}, variant_dir='debug')
SConscript('SConscript', exports={'env': opt}, variant_dir='release')
тогда в SConscript Import ('env')
получит dbg
в первый раз и opt
во второй раз. Это также работает для экспорта / импорта всего, что вам нравится, а не только env.
См. Export () и SConscript () на странице руководства для получения дополнительной информации.