Spec-Zone.ru › CMake

LINK_LIBRARY_OVERRIDE

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

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

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

feature[,link-item]*

Для каждой запятой разделённой link-item, любая существующая функция библиотеки, связанная с ней, будет проигнорирована для целевого объекта, на котором установлено это свойство. Вместо этого элемент будет связан с указанной feature. Каждый link-item может быть чем угодно, что может быть принято в качестве части library-list в генераторском выражении LINK_LIBRARY.

add_library(lib1 ...)
add_library(lib2 ...)
add_library(lib3 ...)

target_link_libraries(lib1 PUBLIC "$<LINK_LIBRARY:feature1,external>")
target_link_libraries(lib2 PUBLIC "$<LINK_LIBRARY:feature2,lib1>")
target_link_libraries(lib3 PRIVATE lib1 lib2)

# lib1 is associated with both feature2 and no feature. Without any override,
# this would result in a fatal error at generation time for lib3.
# Define an override to resolve the incompatible feature associations.
set_property(TARGET lib3 PROPERTY LINK_LIBRARY_OVERRIDE "feature2,lib1,external")

# lib1 and external will now be associated with feature2 instead when linking lib3

Также можно переопределить любую функцию с помощью предварительно определённой функции библиотеки DEFAULT. Это фактически отбрасывает любую функцию для данного элемента связи, только для этого целевого объекта (lib3 в этом примере):

# When linking lib3, discard any library feature for lib1, and use feature2 for external
set_property(TARGET lib3 PROPERTY LINK_LIBRARY_OVERRIDE
  "DEFAULT,lib1"
  "feature2,external"
)

Приведённый выше пример также демонстрирует, как указать разные переопределения функций для разных элементов связи. См. свойство целевого объекта LINK_LIBRARY_OVERRIDE_<LIBRARY> для альтернативного способа переопределения функций библиотек для отдельных библиотек, который может быть проще в некоторых случаях. Если оба свойства определены и указывают на переопределение для одного и того же элемента связи, LINK_LIBRARY_OVERRIDE_<LIBRARY> имеет приоритет над LINK_LIBRARY_OVERRIDE.

Содержание LINK_LIBRARY_OVERRIDE может использовать generator expressions.

Для получения дополнительной информации о функциях библиотек, см. переменные CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE> и CMAKE_LINK_LIBRARY_USING_<FEATURE>.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/prop_tgt/LINK_LIBRARY_OVERRIDE.html

Spec-Zone.ru

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