В вашем SConstruct
файле вы используете вариант dir:
SConscript("main.scons", variant_dir="build", duplicate=0)
Затем в main.scons
вы все настраиваете как обычно:
env = Environment()
env.Program(target='foo', source=Split('foo.c bar.c'))
Это можно сделать без жесткого кодирования варианта dir в SConstruct, используя (ab) репозитории, но в этом подходе есть свои ошибки. Для записи, вы должны выполнить приведенное выше, чтобы встроить в другой каталог:
mkdir mybuild
cd mybuild
scons -Y .. -f ../main.scons
Самый простой и наиболее работоспособный - просто использовать variant_dir
. Затем вы запускаете это как обычно из исходного каталога верхнего уровня. Все артефакты сборки создаются в подкаталоге build
.
В ответ на комментарий JesperE , вот как вы можете написать SConstruct верхнего уровня, чтобы добавить опционально названный каталог сборки:
AddOption('--build', default='build')
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0)
Затем вы бы вызвали это из командной строки следующим образом, чтобы создать каталог сборки с именем "baz":
$ scons --build=baz