target_compile_options

為目標加入編譯選項。

target_compile_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

將選項加入到 COMPILE_OPTIONSINTERFACE_COMPILE_OPTIONS 目標屬性。這些選項會在編譯給定的 <target> 時使用,該目標必須是由 add_executable()add_library() 等命令建立的,並且不能是 別名目標 (ALIAS target)

注意

這些選項在連結目標時不會使用。請參閱 target_link_options() 命令。

參數

如果指定 BEFORE,內容將會被前置到屬性中,而不是附加在後面。請參閱政策 CMP0101,它會影響在某些情況下是否忽略 BEFORE

需要 INTERFACEPUBLICPRIVATE 關鍵字來指定以下參數的範圍PRIVATEPUBLIC 項目將會填充 <target>COMPILE_OPTIONS 屬性。PUBLICINTERFACE 項目將會填充 <target>INTERFACE_COMPILE_OPTIONS 屬性。以下參數指定編譯選項。對於相同的 <target>,重複呼叫會按照呼叫順序附加項目。

在 3.11 版本中新增: 允許在 IMPORTED 目標 上設定 INTERFACE 項目。

target_compile_options 的參數可以使用 $<...> 語法的產生器運算式。請參閱 cmake-generator-expressions(7) 手冊以瞭解可用的運算式。請參閱 cmake-buildsystem(7) 手冊以瞭解更多關於定義建置系統屬性的資訊。

選項去重複

用於目標的最終選項集,是通過累積目前目標及其相依項的使用需求中的選項來建構的。選項集會去重複以避免重複。

在 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

另請參閱