INTERFACE_LINK_LIBRARIES — CMake 3.31.6 Documentation

# INTERFACE_LINK_LIBRARIES

List public interface libraries for a library.

This property contains the list of transitive link dependencies. When the target is linked into another target using the `target_link_libraries()` command, the libraries listed (and recursively their link interface libraries) will be provided to the other target also. This property is overridden by the `LINK_INTERFACE_LIBRARIES` or `LINK_INTERFACE_LIBRARIES_<CONFIG>` property if policy `CMP0022` is `OLD` or unset.

The value of this property is used by the generators when constructing the link rule for a dependent target. A dependent target's direct link dependencies, specified by its `LINK_LIBRARIES` target property, are linked first, followed by indirect dependencies from the transitive closure of the direct dependencies' `INTERFACE_LINK_LIBRARIES` properties. See policy `CMP0022`.

Contents of `INTERFACE_LINK_LIBRARIES` 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.

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.

`INTERFACE_LINK_LIBRARIES` adds transitive link dependencies for a target's dependents. In advanced use cases, one may update the direct link dependencies of a target's dependents by using the `INTERFACE_LINK_LIBRARIES_DIRECT` and `INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE` target properties.

## Creating Relocatable Packages

Note that it is not advisable to populate the `INTERFACE_LINK_LIBRARIES` of a target with absolute paths to dependencies. That would hard-code into installed packages the library file paths for dependencies as found on the machine the package was made on.

See the Creating Relocatable Packages section of the `cmake-packages(7)` manual for discussion of additional care that must be taken when specifying usage requirements while creating packages for redistribution.