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