Как сделать сборку вне исходного кода с помощью 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