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
的内容可以使用 生成器表达式
。
有关库特性的更多信息,请参阅 CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>
和 CMAKE_LINK_LIBRARY_USING_<FEATURE>
变量。