Как сделать сборку вне исходного кода с помощью scons?

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

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

mkdir build
cd build
cmake ..
make

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

1 ответ

Решение

В вашем 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
Другие вопросы по тегам