UNITY_BUILD
Добавлен в версии 3.16.
Если данная свойство установлено в значение true, целевые исходные файлы будут объединены в пакеты для ускорения компиляции. Это делается путем создания (набора) источников Unity, которые #include исходные файлы, а затем компиляции этих источников Unity вместо исходных. Это известно как Unity или Jumbo сборка.
CMake предоставляет различные алгоритмы для выбора источников, которые будут сгруппированы вместе в ведро. Выбор алгоритма определяется свойством целевого объекта UNITY_BUILD_MODE, имеющим следующие допустимые значения:
-
BATCHВ этом режиме CMake определяет, какие файлы сгруппированы вместе. СвойствоUNITY_BUILD_BATCH_SIZEуправляет максимальным количеством источников, которые могут быть объединены в один файл источника Unity. -
GROUPВ этом режиме каждый целевой объект явно указывает, как сгруппировать исходные файлы. Каждый исходный файл, имеющий одинаковое значение свойстваUNITY_GROUP, будет сгруппирован вместе. Любые источники, у которых нет этого свойства, будут компилироваться индивидуально. СвойствоUNITY_BUILD_BATCH_SIZEигнорируется при использовании этого режима.
Если явно не указано свойство UNITY_BUILD_MODE, CMake по умолчанию будет использовать BATCH.
Сборки Unity поддерживаются для следующих языков:
-
C -
Добавлен в версии 3.16.
-
CXX -
Добавлен в версии 3.16.
-
CUDA -
Добавлен в версии 3.31.
-
OBJC -
Добавлен в версии 3.29.
-
OBJCXX -
Добавлен в версии 3.29.
Для целевых объектов, которые смешивают исходные файлы из более чем одного языка, CMake разделяет языки так, что каждый сгенерированный файл источника Unity содержит только источники для одного языка.
Это свойство инициализируется значением переменной CMAKE_UNITY_BUILD при создании целевого объекта.
Примечание
Проекты не должны напрямую устанавливать свойство UNITY_BUILD или связанную с ним переменную CMAKE_UNITY_BUILD в значение true. В зависимости от возможностей вычислительной машины и используемого компилятора, включение сборок Unity может быть уместно или неуместно. Поэтому эта функция должна контролироваться разработчиком, обычно выбирая, устанавливать ли переменную CMAKE_UNITY_BUILD в командной строке cmake(1) или каким-либо другим эквивалентным способом. Однако рекомендуется установить свойство целевого объекта UNITY_BUILD в значение false, если известно, что включение сборок Unity для целевого объекта может привести к проблемам.
ODR (правило одной дефиниции) ошибки
При включении нескольких исходных файлов в один файл, как это делается для сборок Unity, это может потенциально привести к ошибкам ODR. CMake предоставляет ряд мер для решения таких проблем:
- Любой исходный файл, имеющий непустое свойство
COMPILE_OPTIONS,COMPILE_DEFINITIONS,COMPILE_FLAGSилиINCLUDE_DIRECTORIES, не будет объединён в единый исходный файл. - Любой исходный файл, который проверяется на наличие C++ модулей через
CXX_SCAN_FOR_MODULES,CXX_SCAN_FOR_MODULESили членство в наборе файловCXX_MODULESне будет объединён в единый исходный файл. Подробнее см.cmake-cxxmodules(7). - Проекты могут предотвратить объединение отдельного исходного файла в единый исходный файл, установив свойство исходного файла
SKIP_UNITY_BUILD_INCLUSIONв значение true. Это может быть более эффективным способом предотвращения проблем со специфическими файлами, чем отключение сборок Unity для всего целевого объекта. - Проекты могут установить
UNITY_BUILD_UNIQUE_IDдля генерации уникального идентификатора в формате допустимого C-идентификатора для каждого файла в сборке Unity. Это может использоваться для предотвращения проблем с анонимными именованными пространствами в сборках Unity. - Свойства целевого объекта
UNITY_BUILD_CODE_BEFORE_INCLUDEиUNITY_BUILD_CODE_AFTER_INCLUDEмогут использоваться для вставки кода в файлы источников Unity до и после каждого#includeоператора. - Порядок добавления исходных файлов в целевой объект с помощью команд, таких как
add_library(),add_executable()илиtarget_sources(), будет сохранён в сгенерированных файлах источников Unity. Это можно использовать для ручного обеспечения определенной группировки на основе свойства целевого объектаUNITY_BUILD_BATCH_SIZE.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/prop_tgt/UNITY_BUILD.html