target_compile_definitions

為目標添加編譯定義。

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

指定編譯給定的 <target> 時使用的編譯定義。 名為 <target> 的目標必須已由諸如 add_executable()add_library() 之類的命令創建,並且不得為 別名目標

需要 INTERFACEPUBLICPRIVATE 關鍵字來指定以下參數的作用域PRIVATEPUBLIC 項目將填充 <target>COMPILE_DEFINITIONS 屬性。PUBLICINTERFACE 項目將填充 <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)。

另請參閱