target_compile_options¶
Add compile options to a target.
target_compile_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
Adds options to the COMPILE_OPTIONS
or
INTERFACE_COMPILE_OPTIONS
target properties. These options
are used when compiling the given <target>
, which must have been
created by a command such as add_executable()
or
add_library()
and must not be an ALIAS target.
Arguments¶
If BEFORE
is specified, the content will be prepended to the property
instead of being appended.
The INTERFACE
, PUBLIC
and PRIVATE
keywords are required to
specify the scope of the following arguments.
PRIVATE
and PUBLIC
items will populate the COMPILE_OPTIONS
property of <target>
. PUBLIC
and INTERFACE
items will populate the
INTERFACE_COMPILE_OPTIONS
property of <target>
.
The following arguments specify compile options. 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_options
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.
Option De-duplication¶
The final set of options used for a target is constructed by accumulating options from the current target and the usage requirements of its dependencies. The set of options is de-duplicated to avoid repetition.
New in version 3.12: While beneficial for individual options, the de-duplication step can break
up option groups. For example, -option A -option B
becomes
-option A B
. One may specify a group of options using shell-like
quoting along with a SHELL:
prefix. The SHELL:
prefix is dropped,
and the rest of the option string is parsed using the
separate_arguments()
UNIX_COMMAND
mode. For example,
"SHELL:-option A" "SHELL:-option B"
becomes -option A -option B
.
See Also¶
This command can be used to add any options. However, for adding
preprocessor definitions and include directories it is recommended
to use the more specific commands target_compile_definitions()
and target_include_directories()
.
For directory-wide settings, there is the command add_compile_options()
.
For file-specific settings, there is the source file property COMPILE_OPTIONS
.