Как сделать сборку вне исходного кода с помощью scons? - PullRequest
10 голосов
/ 19 ноября 2009

Я использовал cmake для создания своих проектов из исходного кода, что очень удобно, поскольку вы избегаете загрязнения своего исходного каталога ненужными файлами.

Предполагая, что файл CMakeLists.txt находится в текущем каталоге, это можно сделать следующим образом:

mkdir build
cd build
cmake ..
make

Как я могу сделать то же самое в scons?

1 Ответ

11 голосов
/ 19 ноября 2009

В вашем 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
...