INTERFACE_LINK_LIBRARIES¶
列出程式庫的公開介面程式庫。
此屬性包含可轉移連結依賴項的列表。當目標使用 target_link_libraries()
命令連結到另一個目標時,列出的程式庫(以及遞迴地它們的連結介面程式庫)也將提供給另一個目標。如果策略 CMP0022
為 OLD
或未設定,則此屬性會被 LINK_INTERFACE_LIBRARIES
或 LINK_INTERFACE_LIBRARIES_<CONFIG>
屬性覆蓋。
產生器在為依賴目標建構連結規則時使用此屬性的值。依賴目標的直接連結依賴項(由其 LINK_LIBRARIES
目標屬性指定)會先連結,然後是來自直接依賴項的 INTERFACE_LINK_LIBRARIES
屬性的可轉移閉包的間接依賴項。請參閱策略 CMP0022
。
INTERFACE_LINK_LIBRARIES
的內容可以使用「產生器表達式」,語法為 $<...>
。有關可用的表達式,請參閱 cmake-generator-expressions(7)
手冊。有關定義建置系統屬性的更多資訊,請參閱 cmake-buildsystem(7)
手冊。
注意
呼叫 target_link_libraries(<target> ...)
可能會更新 <target>
上的此屬性。如果 <target>
不是在與呼叫相同的目錄中建立的,則 target_link_libraries()
將使用 ::@(directory-id);...;::@
形式包裝每個條目,其中 ::@
是字面的,而 (directory-id)
是未指定的。這告訴產生器,具名的程式庫必須在呼叫者的範圍內查找,而不是在建立 <target>
的範圍內查找。有效的目錄 ID 會在 install(EXPORT)
和 export()
命令匯出時被剝離。
INTERFACE_LINK_LIBRARIES
為目標的依賴項添加可轉移連結依賴項。在進階使用案例中,可以使用 INTERFACE_LINK_LIBRARIES_DIRECT
和 INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE
目標屬性來更新目標依賴項的直接連結依賴項。
處理編譯器驅動程式差異¶
在版本 4.0 中新增。
為了將選項傳遞給連結器工具,每個編譯器驅動程式都有自己的語法。LINKER:
前綴和 ,
分隔符號可用於以可移植的方式指定要傳遞給連結器工具的選項。LINKER:
由適當的驅動程式選項替換,而 ,
由適當的驅動程式分隔符號替換。驅動程式前綴和驅動程式分隔符號由 CMAKE_<LANG>_LINKER_WRAPPER_FLAG
和 CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP
變數的值給出。
例如,"LINKER:-z,defs"
對於 Clang
變成 -Xlinker -z -Xlinker defs
,對於 GNU GCC
變成 -Wl,-z,defs
。
LINKER:
前綴支援使用 SHELL:
前綴和空格作為分隔符號來指定參數,作為替代語法。然後,先前的範例變成 "LINKER:SHELL:-z defs"
。
注意
不支援在 LINKER:
前綴的開頭以外的任何位置指定 SHELL:
前綴。
建立可重定位套件¶
請注意,不建議使用依賴項的絕對路徑來填充目標的 INTERFACE_LINK_LIBRARIES
。這會將依賴項的程式庫檔案路徑硬編碼到已安裝的套件中,如同在製作套件的機器上找到的一樣。
請參閱 cmake-packages(7)
手冊的 建立可重定位套件 章節,以討論在為重新發布建立套件時,指定使用需求時必須採取的額外注意事項。