LINK_LIBRARY_OVERRIDE¶
在 3.24 版本中添加。
覆盖与 LINK_LIBRARY
生成器表达式中的库关联的库特性。这可用于解决因在不同的 LINK_LIBRARY
生成器表达式中为同一个库指定不同特性的而导致的不同库特性问题。
此属性支持覆盖多个库和特性。它需要一个 以分号分隔的列表,其中每个列表项具有以下形式
feature[,link-item]*
对于每个用逗号分隔的 link-item
,与它关联的任何现有库特性都将对为此属性设置的目标被忽略。相反,该项将与指定的 feature
关联。每个 link-item
都是将被接受为 LINK_LIBRARY
生成器表达式中 library-list
的一部分的内容。
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
的内容可以使用 生成器 表达式
。
有关库功能的更多信息,请参见 CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>
和 CMAKE_LINK_LIBRARY_USING_<FEATURE>
变量。