Spec-Zone.ru › CMake 3.21

UNITY_BUILD_UNIQUE_ID

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

Имя допустимого C-идентификатора, которое устанавливается в уникальное значение для каждого файла во время сборки Unity.

Когда это свойство заполнено и когда UNITY_BUILD имеет значение «истина», значение свойства используется для определения определения компилятора указанного имени. Значение определенного символа не определено, но оно уникально для каждого пути к файлу.

Предположим:

set_target_properties(myTarget PROPERTIES
  UNITY_BUILD "ON"
  UNITY_BUILD_UNIQUE_ID "MY_UNITY_ID"
)

символ MY_UNITY_ID определен в уникальное значение для каждого файла.

Одно известное применение этого идентификатора — устранение неоднозначности переменных в анонимном пространстве имен в ограниченном объеме. Анонимные пространства имен представляют проблему для сборки Unity, потому что они используются для обеспечения того, чтобы определенные переменные и объявления были ограничены единицей трансляции, которая приблизительно соответствует одному исходному файлу. Когда исходные файлы объединяются в файл сборки Unity, эти переменные из разных файлов объединяются в единую единицу трансляции, и имена конфликтуют. Это свойство можно использовать, чтобы избежать этого с помощью следующего кода:

// Needed for when unity builds are disabled
#ifndef MY_UNITY_ID
#define MY_UNITY_ID
#endif

namespace { namespace MY_UNITY_ID {
  // The name 'i' clashes (or could clash) with other
  // variables in other anonymous namespaces
  int i = 42;
}}

int use_var()
{
  return MY_UNITY_ID::i;
}

Псевдонимное пространство имен используется внутри истинно анонимного пространства имен. Во многих платформах это сохраняет инвариант, что символы внутри не получают внешнюю связь при выполнении сборки Unity.

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

Spec-Zone.ru

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