Spec-Zone.ru › CMake 3.16

UNITY_BUILD

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

Сборки Unity в настоящее время не поддерживаются для всех языков. CMake версии 3.16.9 поддерживает объединение C и CXX исходных файлов. Для целей, которые смешивают исходные файлы более чем одного языка, 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, не будет объединен в исходный файл Unity.
  • Проекты могут предотвратить объединение отдельного исходного файла в исходный файл Unity, установив его свойство исходного файла SKIP_UNITY_BUILD_INCLUSION в значение true. Это может быть более эффективным способом предотвращения проблем со специфическими файлами, чем отключение сборок 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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/prop_tgt/UNITY_BUILD.html

Spec-Zone.ru

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