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
的內容可能使用 generator expressions
。
有關程式庫功能的更多資訊,請參閱 CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>
和 CMAKE_LINK_LIBRARY_USING_<FEATURE>
變數。