SCons: цели, параметры и повторяемая сборка
Редактор и шаблоны, отладка, профили, параллелизм и диагностика сборки.
SCons получает параметры из SConstruct, платформенных и модульных конфигураций. Выполняйте команды из Source; выбирайте platform, target и arch явно, чтобы повторная сборка не зависела от автоматического выбора машины.
Базовые команды
Для настроенного Windows x64 toolchain:
python -m SCons platform=windows target=editor arch=x86_64 -j4
python -m SCons platform=windows target=template_debug arch=x86_64 -j4
python -m SCons platform=windows target=template_release arch=x86_64 -j4Это три отдельные сборки. Число 4 — пример параллелизма, не рекомендация для каждого компьютера. Увеличение -j может ускорить компиляцию или исчерпать память; при нехватке памяти уменьшите число заданий. Отсутствующий параметр по умолчанию выбирает editor, но доступность цели зависит от платформы.
Для списка параметров используйте python -m SCons --help после установки платформенных зависимостей. Этот запуск всё ещё читает конфигурацию проекта; ошибка обнаружения toolchain не означает, что имя параметра обязательно неверно.
Параметры, которые нельзя путать
| Параметр | Действие |
|---|---|
| target | editor, template_debug или template_release |
| arch | Архитектура целевого бинарника; auto зависит от платформы/хоста |
| dev_build=yes | DEV_ENABLED; при optimize=auto выбирает отсутствие оптимизации и по умолчанию отладочные символы |
| dev_mode=yes | Набор строгих проверок сборки: verbose, warnings=extra, werror, tests, strict_checks, если не переопределены |
| debug_symbols=yes | Генерация символов; не равна включению всех dev-возможностей |
| optimize | auto, none, custom, debug, speed, speed_trace, size или size_extra |
| production=yes | Значения по умолчанию для use_static_cpp, символов и lto=auto; детали зависят от платформы |
| precision | single/double для встроенной вещественной точности; требует согласованного ABI |
| module_mono_enabled=yes | Нативная часть C# интеграции на поддерживаемой платформе; управляемые артефакты готовятся отдельно |
При optimize=auto текущий SConstruct выбирает none для dev_build, speed_trace для editor/template_debug и speed для template_release. Поэтому «редактор всегда неоптимизирован» неверно. Явное optimize может изменить этот выбор.
production=yes не гарантирует LTO на каждом компиляторе: например, текущая Windows-конфигурация MSVC переводит lto=auto в none. Сохраняйте выбранные значения из журнала, а не выводите их только из имени target.
Файлы конфигурации
custom.py — файл параметров Python в корне Source. profile=... добавляет отдельный файл параметров; можно указать путь или имя без .py. Командные аргументы обрабатываются вместе с этими файлами. Храните их в составе конфигурации сборки.
build_profile=... — другой механизм: JSON с disabled_classes и disabled_build_options. Он применяется позже обычного чтения опций и способен изменить значения окружения. Не считайте его синонимом profile и не полагайтесь на простое правило «последний аргумент всегда побеждает» для всех стадий конфигурации.
Для своего модуля используется custom_modules=...; отключение всех модулей по умолчанию через modules_enabled_by_default=no требует явно сохранить зависимости нужных функций. Не переносите огромный список отключений из чужого проекта.
Повторная сборка и IDE
SCons отслеживает зависимости и повторно использует подходящие результаты. Для очистки используйте --clean с той же конфигурацией, а не случайный набор target/arch. SCU объединяет единицы компиляции, меняет расход памяти и характер инкрементальной сборки; сначала получите работающий обычный вариант.
compiledb=yes включает compilation database для инструментов C++. compiledb_gen_only=yes завершает генерацию базы без обычной компиляции; это не готовый бинарник. ninja и cache_path — отдельные параметры ускорения, не подтверждение корректности результата.
Найдите этап отказа
| Этап | Что проверить |
|---|---|
| Python не находит SCons | Интерпретатор и его окружение |
| Платформа/toolchain не обнаружены | SDK, компилятор, среда терминала и platform |
| Ошибка C/C++ | Первый содержательный diagnostic, include-пути, версия компилятора и текущая конфигурация |
| Ошибка линкера | Архитектура и наличие нужных библиотек, совместимость флагов |
| Бинарник создан, проект не запускается | Модули, .NET-комплект, precision и зависимости проекта |
| Экспорт не работает | Нужный шаблон действительно собран и выбран в preset |
Параметры и их последовательность сверены по текущему Source. Приведённые команды полной сборки не выполнялись в рамках этой проверки; успешный запрос версии SCons не заменяет компиляцию и проверку экспортированной игры.