Spec-Zone.ru › CMake 3.31

CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES

Добавлена в версии 3.30.

Эта переменная определяет поведение указанной библиотеки ссылок <FEATURE>. Она определяет, как <FEATURE> взаимодействует с другими функциями, когда <FEATURE> должна быть применена, и аспекты обработки <FEATURE>, когда CMake собирает окончательную командную строку компоновщика (например, дедупликация).

Синтаксис флагов компоновщика для <FEATURE> контролируется переменными CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE> и CMAKE_LINK_LIBRARY_USING_<FEATURE>. Переменные CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>_SUPPORTED и CMAKE_LINK_LIBRARY_USING_<FEATURE>_SUPPORTED управляют тем, доступна ли <FEATURE> вообще.

При компоновке для конкретного языка <LANG>, CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES игнорируется, если переменная CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTES также определена для того же <FEATURE>.

Значение CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES и CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTES в конце области каталога, в которой определен целевой объект, имеет значение.

Определение атрибутов функций

Определение атрибутов функции представляет собой список, разделенный точкой с запятой элементов attribute=value(s). Если атрибут имеет несколько значений, эти значения должны быть разделены запятыми.

Поддерживаются следующие атрибуты:

LIBRARY_TYPE=<library-type-list>

Укажите типы библиотек, поддерживаемые функцией. Допустимые значения: STATIC, SHARED, MODULE, и EXECUTABLE.

Если этот атрибут не указан, значение по умолчанию LIBRARY_TYPE=STATIC,SHARED,MODULE,EXECUTABLE.

Если функция используется с недопустимым типом библиотеки, CMake выведет предупреждение для разработчика, и функция будет проигнорирована.

OVERRIDE=<feature-list>

Укажите, какие функции этот атрибут заменяет в случае конфликта. Этот механизм переопределения заменяется на определения свойств целевого объекта LINK_LIBRARY_OVERRIDE или LINK_LIBRARY_OVERRIDE_<LIBRARY>, если они определены.

Если этот атрибут не указан, значение по умолчанию — пустой список.

DEDUPLICATION=YES|NO|DEFAULT

Укажите стратегию дедупликации для библиотеки, использующей эту функцию.

YES

Библиотека всегда дедуплицируется. Стратегия по умолчанию, применяемая CMake, игнорируется.

NO

Библиотека никогда не дедуплицируется. Стратегия по умолчанию, применяемая CMake, игнорируется.

DEFAULT

Позвольте CMake автоматически определить стратегию дедупликации.

Если этот атрибут не указан, используется DEFAULT.

Пример

Частая потребность — загрузка полного архива в рамках создания динамической библиотеки. Для этой цели можно использовать встроенную функцию WHOLE_ARCHIVE. Реализация этой встроенной функции задаёт следующие атрибуты функции ссылок на библиотеку:

set(CMAKE_LINK_LIBRARY_WHOLE_ARCHIVE_ATTRIBUTES
  LIBRARY_TYPE=STATIC
  OVERRIDE=DEFAULT
  DEDUPLICATION=YES
)
LIBRARY_TYPE=STATIC

Эта функция имеет смысл только для статических библиотек.

OVERRIDE=DEFAULT

Функция DEFAULT будет переопределена функцией WHOLE_ARCHIVE, потому что они совместимы и улучшают пользовательский опыт: стандартное описание библиотеки и $<LINK_LIBRARY:WHOLE_ARCHIVE> могут использоваться свободно.

DEDUPLICATION=YES

При использовании этой функции компоновщик загружает все символы из статической библиотеки, поэтому нет необходимости повторять библиотеку в командной строке компоновщика.

Функцию WHOLE_ARCHIVE можно использовать так:

add_library(A STATIC ...)
add_library(B STATIC ...)

target_link_libraries(B PUBLIC A)
target_link_libraries(A PUBLIC B)

add_library(global SHARED ...)
target_link_libraries(global PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,A>)

Полученная команда компоновки будет содержать только один экземпляр библиотеки A, а флаги компоновщика обеспечат загрузку всех символов из библиотеки A.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/variable/CMAKE_LINK_LIBRARY_FEATURE_ATTRIBUTES.html

Spec-Zone.ru

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