LINK_LIBRARIES_ONLY_TARGETS¶
在版本 3.23 中新增。
強制要求可以作為目標名稱的連結項目實際上是現有的目標。
將此屬性設定為 true 值,以對 LINK_LIBRARIES
和 INTERFACE_LINK_LIBRARIES
目標屬性的內容啟用額外檢查,這些屬性通常由 target_link_libraries()
填入。檢查也適用於透過其相依性的 INTERFACE_LINK_LIBRARIES_DIRECT
屬性新增至目標的程式庫。CMake 將驗證可能為目標名稱的連結項目實際上是否命名了現有目標。如果滿足以下條件,則項目被視為可能的目標名稱:
它不包含
/
或\
,且它不是以
-
開頭,且(基於歷史原因)它不是以
$
或`
開頭。
此屬性由建立非匯入目標時 CMAKE_LINK_LIBRARIES_ONLY_TARGETS
變數的值初始化。可以在匯入目標上顯式啟用此屬性,以檢查其連結介面。
在以下範例中,CMake 將在配置時因 miLib
不是目標而停止並顯示錯誤
set(CMAKE_LINK_LIBRARIES_ONLY_TARGETS ON)
add_library(myLib STATIC myLib.c)
add_executable(myExe myExe.c)
target_link_libraries(myExe PRIVATE miLib) # typo for myLib
為了在使用工具鏈提供的程式庫名稱進行連結的同時仍然強制執行 LINK_LIBRARIES_ONLY_TARGETS
,請使用帶有 IMPORTED_LIBNAME
目標屬性的 匯入的 介面程式庫
add_library(toolchain::m INTERFACE IMPORTED)
set_property(TARGET toolchain::m PROPERTY IMPORTED_LIBNAME "m")
target_link_libraries(myExe PRIVATE toolchain::m)
另請參閱政策 CMP0028
。
注意
如果 INTERFACE_LINK_LIBRARIES
包含產生器表達式,則其實際連結項目列表可能取決於使用目標的類型和屬性。在這種情況下,CMake 可能不總是偵測到僅針對特定使用者出現的遺失目標名稱。未來版本的 CMake 具有改進的啟發法,可能會開始針對先前版本的 CMake 接受的專案觸發錯誤。