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_link_options()
命令。
參數¶
如果指定了 BEFORE
,則內容將被前置到屬性,而不是附加到屬性。 請參閱影響在某些情況下是否會忽略 BEFORE
的政策 CMP0101
。
需要 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>
添加語言範圍的標誌,這些標誌會傳遞給編譯器的所有調用。 這包括驅動編譯和驅動連結的調用。