Spec-Zone.ru › CMake 3.17

UNITY_BUILD

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

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

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

Spec-Zone.ru

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