Spec-Zone.ru › CMake

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/latest/variable/CMAKE_LINK_LIBRARY_FEATURE_ATTRIBUTES.html

Spec-Zone.ru

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