Spec-Zone.ru › CMake 3.30

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

Spec-Zone.ru

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