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