Spec-Zone.ru › CMake 3.26

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.26.0-rc3 поддерживает объединение C и CXX исходных файлов. Для целевых объектов, которые смешивают исходные файлы из более чем одного языка, CMake будет разделять языки таким образом, чтобы каждый сгенерированный единый исходный файл содержал только исходные файлы одного языка.

Это свойство инициализируется значением переменной CMAKE_UNITY_BUILD при создании целевого объекта.

Примечание

Проекты не должны напрямую устанавливать свойство UNITY_BUILD или связанную с ним переменную CMAKE_UNITY_BUILD в значение true. В зависимости от возможностей машины сборки и используемого компилятора, включение сборки Unity может быть или не быть уместным. Поэтому эта функция должна находиться под контролем разработчика, который обычно выбирает, включить или выключить сборку Unity, установив переменную CMAKE_UNITY_BUILD в командной строке cmake(1) или каким-либо другим эквивалентным способом. Однако рекомендуется установить свойство целевого объекта UNITY_BUILD в значение false, если известно, что включение сборки Unity для целевого объекта может привести к проблемам.

ODR (Правило одной дефиниции) ошибки

Когда несколько исходных файлов включаются в один исходный файл, как это делается при сборке Unity, это может потенциально привести к ошибкам ODR. CMake предоставляет ряд мер для решения таких проблем:

  • Любой исходный файл, у которого есть непустое свойство COMPILE_OPTIONS, COMPILE_DEFINITIONS, COMPILE_FLAGS или INCLUDE_DIRECTORIES исходного файла, не будет объединен в единый исходный файл.
  • Проекты могут предотвратить объединение конкретного исходного файла в единый исходный файл, установив для него свойство исходного файла 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–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/prop_tgt/UNITY_BUILD.html

Spec-Zone.ru

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