target_link_options¶
在 3.13 版本中新增。
為可執行檔、共享函式庫或模組函式庫目標的連結步驟新增選項。
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定的 <target>
必須已由 add_executable()
或 add_library()
等指令建立,且不得為 別名目標。
此指令可用於新增任何連結選項,但另有其他指令可新增函式庫 (target_link_libraries()
或 link_libraries()
)。請參閱 directory
和 target
LINK_OPTIONS
屬性的文件。
注意
此指令不能用於為靜態函式庫目標新增選項,因為它們不使用連結器。若要新增歸檔器或 MSVC 函式庫管理員旗標,請參閱 STATIC_LIBRARY_OPTIONS
目標屬性。
如果指定 BEFORE
,則內容會被加在屬性前面,而不是附加在後面。
必須使用 INTERFACE
、PUBLIC
和 PRIVATE
關鍵字來指定以下引數的範圍。PRIVATE
和 PUBLIC
項目會填入 <target>
的 LINK_OPTIONS
屬性。PUBLIC
和 INTERFACE
項目會填入 <target>
的 INTERFACE_LINK_OPTIONS
屬性。以下引數指定連結選項。針對相同 <target>
的重複呼叫會按照呼叫順序附加項目。
注意
匯入的目標僅支援 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:
前綴。
另請參閱¶
CMAKE_<LANG>_FLAGS
和CMAKE_<LANG>_FLAGS_<CONFIG>
加入語言層級的旗標,這些旗標會傳遞給編譯器的所有呼叫。這包括驅動編譯的呼叫以及驅動連結的呼叫。