# LINK_LIBRARIES

List of direct link dependencies.

This property specifies the list of libraries or targets which will be used for linking. In addition to accepting values from the `target_link_libraries()` command, values may be set directly on any target using the `set_property()` command.

The value of this property is used by the generators to construct the link rule for the target. The direct link dependencies are linked first, followed by indirect dependencies from the transitive closure of the direct dependencies' `INTERFACE_LINK_LIBRARIES` properties. See policy `CMP0022`.

Contents of `LINK_LIBRARIES` may use `generator expressions` with the syntax `$<...>`. Policy `CMP0131` affects the behavior of the `LINK_ONLY` generator expression for this property.

See the `cmake-buildsystem(7)` manual for more on defining buildsystem properties.

Note

A call to `target_link_libraries(<target> ...)` may update this property on `<target>`. If `<target>` was not created in the same directory as the call then `target_link_libraries()` will wrap each entry with the form `::@(directory-id);...;::@`, where the `::@` is literal and the `(directory-id)` is unspecified. This tells the generators that the named libraries must be looked up in the scope of the caller rather than in the scope in which the `<target>` was created. Valid directory ids are stripped on export by the `install(EXPORT)` and `export()` commands.

In advanced use cases, the list of direct link dependencies specified by this property may be updated by usage requirements from dependencies. See the `INTERFACE_LINK_LIBRARIES_DIRECT` and `INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE` target properties.

See the `CMAKE_LINK_LIBRARIES_STRATEGY` variable and corresponding `LINK_LIBRARIES_STRATEGY` target property for details on how CMake orders direct link dependencies on linker command lines.

## Handling Compiler Driver Differences

Added in version 4.0.

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 `CMAKE_<LANG>_LINKER_WRAPPER_FLAG` and `CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP` variables.

For example, `"LINKER:-z,defs"` becomes `-Xlinker -z -Xlinker defs` for `Clang` and `-Wl,-z,defs` for `GNU GCC`.

The `LINKER:` prefix supports, as an alternative syntax, specification of arguments using the `SHELL:` prefix and space as separator. The previous example then becomes `"LINKER:SHELL:-z defs"`.

Note

Specifying the `SHELL:` prefix anywhere other than at the beginning of the `LINKER:` prefix is not supported.