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–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.24/prop_tgt/LINK_LIBRARY_OVERRIDE.html