UNITY_BUILD_UNIQUE_ID
Добавлен в версии 3.20.
Имя допустимого C-идентификатора, которое устанавливается в уникальное значение для каждого файла во время сборки Unity.
Когда это свойство заполнено и когда UNITY_BUILD имеет значение true, значение свойства используется для определения компиляционной директивы указанного имени. Значение определённого символа не определено, но оно уникально для каждого пути к файлу.
Дано:
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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/prop_tgt/UNITY_BUILD_UNIQUE_ID.html