CMP0079.rst 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. CMP0079
  2. -------
  3. .. versionadded:: 3.13
  4. :command:`target_link_libraries` allows use with targets in other directories.
  5. Prior to CMake 3.13 the :command:`target_link_libraries` command did not
  6. accept targets not created in the calling directory as its first argument
  7. for calls that update the :prop_tgt:`LINK_LIBRARIES` of the target itself.
  8. It did accidentally accept targets from other directories on calls that
  9. only update the :prop_tgt:`INTERFACE_LINK_LIBRARIES`, but would simply
  10. add entries to the property as if the call were made in the original
  11. directory. Thus link interface libraries specified this way were always
  12. looked up by generators in the scope of the original target rather than
  13. in the scope that called :command:`target_link_libraries`.
  14. CMake 3.13 now allows the :command:`target_link_libraries` command to
  15. be called from any directory to add link dependencies and link interface
  16. libraries to targets created in other directories. The entries are added
  17. to :prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
  18. using a special (internal) suffix to tell the generators to look up the
  19. names in the calling scope rather than the scope that created the target.
  20. This policy provides compatibility with projects that already use
  21. :command:`target_link_libraries` with the ``INTERFACE`` keyword
  22. on a target in another directory to add :prop_tgt:`INTERFACE_LINK_LIBRARIES`
  23. entries to be looked up in the target's directory. Such projects should
  24. be updated to be aware of the new scoping rules in that case.
  25. The ``OLD`` behavior of this policy is to disallow
  26. :command:`target_link_libraries` calls naming targets from another directory
  27. except in the previously accidentally allowed case of using the ``INTERFACE``
  28. keyword only. The ``NEW`` behavior of this policy is to allow all such
  29. calls but use the new scoping rules.
  30. This policy was introduced in CMake version 3.13. CMake version
  31. |release| warns when the policy is not set and uses ``OLD`` behavior.
  32. Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
  33. explicitly.
  34. .. include:: DEPRECATED.txt