target_compile_definitions¶
為目標添加編譯定義。
target_compile_definitions(<target>
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定編譯給定的 <target>
時使用的編譯定義。 名為 <target>
的目標必須已由諸如 add_executable()
或 add_library()
之類的命令創建,並且不得為 別名目標。
需要 INTERFACE
、PUBLIC
和 PRIVATE
關鍵字來指定以下參數的作用域。PRIVATE
和 PUBLIC
項目將填充 <target>
的 COMPILE_DEFINITIONS
屬性。PUBLIC
和 INTERFACE
項目將填充 <target>
的 INTERFACE_COMPILE_DEFINITIONS
屬性。以下參數指定編譯定義。對同一個 <target>
的重複調用會按照調用順序附加項目。
Added in version 3.11: 允許在 匯入目標 上設定 INTERFACE
項目。
target_compile_definitions
的參數可以使用生成器表達式,語法為 $<...>
。 請參閱 cmake-generator-expressions(7)
手冊,以取得可用的表達式。 有關定義建置系統屬性的更多訊息,請參閱 cmake-buildsystem(7)
手冊。
任何項目上的前導 -D
都將被移除。 空項目將被忽略。 例如,以下所有內容都是等效的
target_compile_definitions(foo PUBLIC FOO)
target_compile_definitions(foo PUBLIC -DFOO) # -D removed
target_compile_definitions(foo PUBLIC "" FOO) # "" ignored
target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored
定義可以選擇性地具有值
target_compile_definitions(foo PUBLIC FOO=1)
請注意,許多編譯器將 -DFOO
視為等同於 -DFOO=1
,但其他工具可能無法在所有情況下識別到這一點(例如 IntelliSense)。