target_compile_options¶
為目標加入編譯選項。
target_compile_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
將選項加入到 COMPILE_OPTIONS
或 INTERFACE_COMPILE_OPTIONS
目標屬性。這些選項會在編譯給定的 <target>
時使用,該目標必須是由 add_executable()
或 add_library()
等命令建立的,並且不能是 別名目標 (ALIAS target)。
注意
這些選項在連結目標時不會使用。請參閱 target_link_options()
命令。
參數¶
如果指定 BEFORE
,內容將會被前置到屬性中,而不是附加在後面。請參閱政策 CMP0101
,它會影響在某些情況下是否忽略 BEFORE
。
需要 INTERFACE
、PUBLIC
和 PRIVATE
關鍵字來指定以下參數的範圍。PRIVATE
和 PUBLIC
項目將會填充 <target>
的 COMPILE_OPTIONS
屬性。PUBLIC
和 INTERFACE
項目將會填充 <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
。
另請參閱¶
此命令可用於新增任何選項。但是,對於新增預處理器定義和包含目錄,建議使用更具體的命令
target_compile_definitions()
和target_include_directories()
。對於目錄範圍的設定,可以使用命令
add_compile_options()
。對於檔案特定的設定,可以使用原始檔屬性
COMPILE_OPTIONS
。此命令會為目標中的所有語言新增編譯選項。使用
COMPILE_LANGUAGE
產生器運算式來指定各語言的編譯選項。CMAKE_<LANG>_FLAGS
和CMAKE_<LANG>_FLAGS_<CONFIG>
會新增傳遞給編譯器所有調用的語言範圍旗標。這包括驅動編譯和驅動連結的調用。