LINK_OPTIONS¶
版本 3.13 新增。
用於共用函式庫、模組和可執行目標檔的連結步驟以及裝置連結步驟的選項列表。靜態函式庫目標需要使用 STATIC_LIBRARY_OPTIONS
目標屬性。
這些選項同時用於正常連結和裝置連結(請參閱政策 CMP0105
)。若要控制正常和裝置連結步驟的連結選項,可以使用 $<HOST_LINK>
和 $<DEVICE_LINK>
產生器表達式。
此屬性保存其目標目前為止指定的 以分號分隔的列表 選項。使用 target_link_options()
命令來附加更多選項。
當建立目標時,此屬性由 LINK_OPTIONS
目錄屬性初始化,並由產生器用於設定編譯器的選項。
LINK_OPTIONS
的內容可以使用具有語法 $<...>
的「產生器表達式」。請參閱 cmake-generator-expressions(7)
手冊以取得可用的表達式。請參閱 cmake-buildsystem(7)
手冊以了解更多關於定義建置系統屬性的資訊。
注意
此屬性必須優先於 LINK_FLAGS
屬性使用。
主機和裝置特定的連結選項¶
版本 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:
前綴。