INTERFACE_LINK_OPTIONS¶
在版本 3.13 中新增。
程式庫的公開連結選項需求列表。
目標可以填充此屬性,以發布針對目標標頭檔進行編譯所需的連結選項。target_link_options()
命令會使用提供給 PUBLIC
和 INTERFACE
關鍵字的值來填充此屬性。專案也可以直接取得和設定此屬性。
當使用 target_link_libraries()
指定目標依賴項時,CMake 將從所有目標依賴項讀取此屬性,以確定消費者的建置屬性。
INTERFACE_LINK_OPTIONS
的內容可以使用語法為 $<...>
的「產生器表達式」。請參閱 cmake-generator-expressions(7)
手冊以取得可用的表達式。請參閱 cmake-buildsystem(7)
手冊以取得關於定義建置系統屬性的更多資訊。
主機和裝置特定的連結選項¶
在版本 3.18 中新增:當涉及到裝置連結步驟時,該步驟由 CUDA_SEPARABLE_COMPILATION
和 CUDA_RESOLVE_DEVICE_SYMBOLS
屬性和政策 CMP0105
控制,原始選項將被傳遞到主機和裝置連結步驟(對於裝置連結,將包裹在 -Xcompiler
或等效物中)。用 $<DEVICE_LINK:...>
產生器表達式包裹的選項將僅用於裝置連結步驟。用 $<HOST_LINK:...>
產生器表達式包裹的選項將僅用於主機連結步驟。
選項去重複¶
用於目標的最終選項集是通過累積來自當前目標及其依賴項的使用需求的選項來構建的。選項集會被去重複以避免重複。
在版本 3.12 中新增:雖然去重複步驟對於個別選項有利,但它可能會破壞選項組。例如,-option A -option B
會變成 -option A B
。可以使用類似 shell 的引號以及 SHELL:
前綴來指定選項組。SHELL:
前綴會被刪除,其餘的選項字串會使用 separate_arguments()
UNIX_COMMAND
模式進行解析。例如,"SHELL:-option A" "SHELL:-option B"
會變成 -option A -option B
。
處理編譯器驅動程式差異¶
為了將選項傳遞給連結器工具,每個編譯器驅動程式都有自己的語法。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:
前綴和空格作為分隔符來指定參數。先前的範例因此變成 "LINKER:SHELL:-z defs"
。
注意
不支援在 LINKER:
前綴開頭以外的任何位置指定 SHELL:
前綴。