Spec-Zone.ru › CMake 3.28

UNITY_BUILD

Новое в версии 3.16.

При установке этого свойства в значение true, целевые исходные файлы будут объединены в пакеты для ускорения компиляции. Это делается путем создания (набора) единых исходных файлов, которые #include исходные файлы, а затем компиляции этих единых исходных файлов вместо оригинальных. Это известно как сборка Unity или Jumbo.

CMake предоставляет различные алгоритмы для выбора исходных файлов, которые группируются в пакет. Выбор алгоритма определяется свойством целевого объекта UNITY_BUILD_MODE, которое имеет следующие допустимые значения:

  • BATCH В этом режиме CMake определяет, какие файлы объединяются. Свойство UNITY_BUILD_BATCH_SIZE управляет верхним пределом количества исходных файлов, которые могут быть объединены в один единый исходный файл.
  • GROUP В этом режиме каждый целевой объект явно указывает, как сгруппировать исходные файлы. Все исходные файлы с одинаковым значением свойства UNITY_GROUP будут сгруппированы вместе. Любые исходные файлы без этого свойства будут компилироваться индивидуально. Свойство UNITY_BUILD_BATCH_SIZE игнорируется при использовании этого режима.

Если явно не задано UNITY_BUILD_MODE, CMake по умолчанию будет использовать BATCH.

Сборки Unity в настоящее время не поддерживаются для всех языков. CMake версии 3.28.6 поддерживает объединение C и CXX исходных файлов. Для целевых объектов, которые смешивают исходные файлы из более чем одного языка, CMake будет разделять языки таким образом, чтобы каждый сгенерированный единый исходный файл содержал исходные файлы только одного языка.

Это свойство инициализируется значением переменной 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 могут использоваться для вставки кода в единые исходные файлы до и после каждой #include инструкции.
  • Порядок добавления исходных файлов в целевой объект с помощью команд, таких как add_library(), add_executable() или target_sources(), сохранится в сгенерированных единых исходных файлах. Это можно использовать для ручного принудительного группирования на основе свойства целевого объекта UNITY_BUILD_BATCH_SIZE.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/prop_tgt/UNITY_BUILD.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API