SCons: Как использовать одни и те же компоновщики для нескольких вариантов (выпуск / отладка) программы - PullRequest
5 голосов
/ 17 марта 2010

Руководство пользователя 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 не дает более глубокого понимания этой темы.

Спасибо за ваш вклад!

Ответы [ 2 ]

4 голосов
/ 18 марта 2010

SConscript - это метод, определенный в самой среде:

for dir, env in (('release', opt), ('debug', dbg)):
    env.SConscript('SConscript', 'env', variant_dir=dir)

А затем из SConscript вы можете:

Import('env')
2 голосов
/ 30 марта 2010

Кроме того, вы можете передать словарь в качестве аргумента экспорта в 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 () на странице man для получения дополнительной информации.

...