target_link_options¶
版本 3.13 新增。
為可執行檔、共享函式庫或模組函式庫目標的連結步驟新增選項。
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
名為 <target>
的目標必須透過 add_executable()
或 add_library()
等命令建立,且不得為 ALIAS 目標。
此命令可用於新增任何連結選項,但另有其他命令可用於新增函式庫 (target_link_libraries()
或 link_libraries()
)。請參閱 directory
和 target
LINK_OPTIONS
屬性的文件。
注意
此命令不能用於為靜態函式庫目標新增選項,因為它們不使用連結器。若要新增 archiver 或 MSVC librarian 旗標,請參閱 STATIC_LIBRARY_OPTIONS
目標屬性。
如果指定 BEFORE
,內容將會前置於屬性,而不是附加於屬性。
需要 INTERFACE
、PUBLIC
和 PRIVATE
關鍵字來指定以下引數的範圍。PRIVATE
和 PUBLIC
項目將會填充 <target>
的 LINK_OPTIONS
屬性。PUBLIC
和 INTERFACE
項目將會填充 <target>
的 INTERFACE_LINK_OPTIONS
屬性。以下引數指定連結選項。對同一個 <target>
重複呼叫會依呼叫順序附加項目。
注意
IMPORTED 目標 僅支援 INTERFACE
項目。
target_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:
前綴。