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> 重複呼叫會依呼叫順序附加項目。

在 3.11 版本中新增: 允許在 IMPORTED 目標上設定 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)。

另請參閱