target_compile_definitionsΒΆ
Add compile definitions to a target.
target_compile_definitions(<target>
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
Specifies compile definitions to use when compiling a given <target>
. The
named <target>
must have been created by a command such as
add_executable()
or add_library()
and must not be an
ALIAS target.
The INTERFACE
, PUBLIC
and PRIVATE
keywords are required to
specify the scope of the following arguments.
PRIVATE
and PUBLIC
items will populate the COMPILE_DEFINITIONS
property of <target>
. PUBLIC
and INTERFACE
items will populate the
INTERFACE_COMPILE_DEFINITIONS
property of <target>
.
The following arguments specify compile definitions. Repeated calls for the
same <target>
append items in the order called.
New in version 3.11: Allow setting INTERFACE
items on IMPORTED targets.
Arguments to target_compile_definitions
may use "generator expressions"
with the syntax $<...>
. See the cmake-generator-expressions(7)
manual for available expressions. See the cmake-buildsystem(7)
manual for more on defining buildsystem properties.
Any leading -D
on an item will be removed. Empty items are ignored.
For example, the following are all equivalent:
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
Definitions may optionally have values:
target_compile_definitions(foo PUBLIC FOO=1)
Note that many compilers treat -DFOO
as equivalent to -DFOO=1
, but
other tools may not recognize this in all circumstances (e.g. IntelliSense).