New in version 3.13.
target_link_libraries() allows use with targets in other directories.
Prior to CMake 3.13 the
target_link_libraries() command did not
accept targets not created in the calling directory as its first argument
for calls that update the
LINK_LIBRARIES of the target itself.
It did accidentally accept targets from other directories on calls that
only update the
INTERFACE_LINK_LIBRARIES, but would simply
add entries to the property as if the call were made in the original
directory. Thus link interface libraries specified this way were always
looked up by generators in the scope of the original target rather than
in the scope that called
CMake 3.13 now allows the
target_link_libraries() command to
be called from any directory to add link dependencies and link interface
libraries to targets created in other directories. The entries are added
using a special (internal) suffix to tell the generators to look up the
names in the calling scope rather than the scope that created the target.
This policy provides compatibility with projects that already use
target_link_libraries() with the
on a target in another directory to add
entries to be looked up in the target's directory. Such projects should
be updated to be aware of the new scoping rules in that case.
OLD behavior of this policy is to disallow
target_link_libraries() calls naming targets from another directory
except in the previously accidentally allowed case of using the
keyword only. The
NEW behavior of this policy is to allow all such
calls but use the new scoping rules.
This policy was introduced in CMake version 3.13. CMake version
3.23.20220523-g722a9a6 warns when the policy is not set and uses
cmake_policy() command to set it to
OLD behavior of a policy is
deprecated by definition
and may be removed in a future version of CMake.