Add options to the link step for an executable, shared library or module library target.
target_link_options(<target> [BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
This command can be used to add any link options, but alternative commands exist to add libraries (
link_libraries()). See documentation of the
This command cannot be used to add options for static library targets, since they do not use a linker. To add archiver or MSVC librarian flags, see the
STATIC_LIBRARY_OPTIONS target property.
BEFORE is specified, the content will be prepended to the property instead of being appended.
PRIVATE keywords are required to specify the scope of the following arguments.
PUBLIC items will populate the
LINK_OPTIONS property of
INTERFACE items will populate the
INTERFACE_LINK_OPTIONS property of
<target>. (IMPORTED targets only support
INTERFACE items.) The following arguments specify link options. Repeated calls for the same
<target> append items in the order called.
target_link_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.
When a device link step is involved, which is controlled by
CUDA_RESOLVE_DEVICE_SYMBOLS properties and policy
CMP0105, the raw options will be delivered to the host and device link steps (wrapped in
-Xcompiler or equivalent for device link). Options wrapped with
generator expression will be used only for the device link step. Options wrapped with
generator expression will be used only for the host link step.
The final set of compile or link 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. While beneficial for individual options, the de-duplication step can break up option groups. For example,
-D A -D B becomes
-D 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
UNIX_COMMAND mode. For example,
"SHELL:-D A" "SHELL:-D B" becomes
-D A -D B.
To pass options to the linker tool, each compiler driver has its own syntax. The
LINKER: prefix and
, separator can be used to specify, in a portable way, options to pass to the linker tool.
LINKER: is replaced by the appropriate driver option and
, by the appropriate driver separator. The driver prefix and driver separator are given by the values of the
-Xlinker -z -Xlinker defs for
LINKER: prefix can be specified as part of a
SHELL: prefix expression.
LINKER: prefix supports, as an alternative syntax, specification of arguments using the
SHELL: prefix and space as separator. The previous example then becomes
SHELL: prefix anywhere other than at the beginning of the
LINKER: prefix is not supported.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.