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:
前綴。