Как использовать Scons для компиляции одних и тех же объектов в разных средах с помощью Glob? - PullRequest
6 голосов
/ 26 октября 2010

У меня есть проект на C ++ с использованием Scons. Сначала у меня есть только оптимизированная версия для компиляции, она отлично работает. Затем мне также нужна отладочная версия, затем я добавляю другую среду для нее. Вот код Scons:

env = Environment()

opt = env.Clone(CCFLAGS=['-pthread', '-O3', '-Wall'])
opt_objs = opt.Glob('src/*.cpp')
prog = opt.Program('prog', opt_objs)

dbg = env.Clone(CCFLAGS=['-pthread', '-Wall', '-g', '-O0'])
dbg_objs = dbg.Glob('src/*.cpp')
dbg_prog = dbg.Program('dbg_prog', dbg_objs)

С этим кодом я столкнулся с ошибкой:

scons: *** Two environments with different actions were specified for the same target: 
src/CometReadService.o

Как вы можете видеть, эти целевые файлы .o, созданные opt.Glob ('src / .cpp') и dbg.Glob ('src / .cpp'), имеют одно и то же имя. Читая документ Несколько строительных сред Я знаю, что могу переименовать объект как "opt.Object ('xxx-opt', 'xxx.c')", но, тем не менее, это Glob, а не Object. Как я могу решить эту проблему?

1 Ответ

7 голосов
/ 26 октября 2010

В руководстве scons описано, как использовать функцию VariantDir (или аргумент при добавлении SConscripts) для настройки различных каталогов сборки. В простейшем случае VariantDir отделяет выходные данные сборки от исходных файлов, но его также можно использовать для разделения выходных данных сборки в различных средах.

env = Environment()

opt = env.Clone(CCFLAGS=['-pthread', '-O3', '-Wall'])
opt.VariantDir('gen-opt', 'src', duplicate=0)
opt_objs = opt.Glob('gen-opt/*.cpp')
prog = opt.Program('prog', opt_objs)

dbg = env.Clone(CCFLAGS=['-pthread', '-Wall', '-g', '-O0'])
dbg.VariantDir('gen-dbg', 'src', duplicate=0)
dbg_objs = dbg.Glob('gen-dbg/*.cpp')
dbg_prog = dbg.Program('dbg_prog', dbg_objs)

Использование VariantDir может потребовать некоторых экспериментов. Например, обратите внимание, что аргумент Glob изменился - без параметра duplicate=0 по умолчанию VariantDir дублирует исходные файлы в каталоге сборки.

...