LINK_LIBRARY_OVERRIDE_<LIBRARY>¶
在 3.24 版本中添加。
覆盖 <LIBRARY> 的库功能,该功能来自 LINK_LIBRARY 生成器表达式。这可用于解决因在不同的 LINK_LIBRARY 生成器表达式中为 <LIBRARY> 指定了不同功能而导致的库功能不兼容问题。
当在目标上设置此属性时,它会包含一个单独的库功能名称,该名称将在链接该目标时应用于 <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_lib1 feature2)
# lib1 will now be associated with feature2 instead when linking lib3
还可以使用预定义的 DEFAULT 库功能来覆盖任何功能。这会仅为该目标(此示例中的 lib3)有效地丢弃该链接项的任何功能。
# When linking lib3, discard any library feature for lib1
set_property(TARGET lib3 PROPERTY LINK_LIBRARY_OVERRIDE_lib1 DEFAULT)
有关一次性覆盖多个库的功能的方法,请参阅 LINK_LIBRARY_OVERRIDE 目标属性。如果同时定义了这两个属性并为同一个链接项指定了覆盖,则 LINK_LIBRARY_OVERRIDE_<LIBRARY> 优先于 LINK_LIBRARY_OVERRIDE。
LINK_LIBRARY_OVERRIDE_<LIBRARY> 的内容可能使用 生成器表达式。
有关库功能的更多信息,请参阅 CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE> 和 CMAKE_LINK_LIBRARY_USING_<FEATURE> 变量。