CMP0023
-------

Plain and keyword :command:`target_link_libraries` signatures cannot be mixed.

CMake 2.8.12 introduced the :command:`target_link_libraries` signature using
the ``PUBLIC``, ``PRIVATE``, and ``INTERFACE`` keywords to generalize the
``LINK_PUBLIC`` and ``LINK_PRIVATE`` keywords introduced in CMake 2.8.7.
Use of signatures with any of these keywords sets the link interface of a
target explicitly, even if empty.  This produces confusing behavior
when used in combination with the historical behavior of the plain
:command:`target_link_libraries` signature.  For example, consider the code:

::

 target_link_libraries(mylib A)
 target_link_libraries(mylib PRIVATE B)

After the first line the link interface has not been set explicitly so
CMake would use the link implementation, A, as the link interface.
However, the second line sets the link interface to empty.  In order
to avoid this subtle behavior CMake now prefers to disallow mixing the
plain and keyword signatures of :command:`target_link_libraries` for a single
target.

The ``OLD`` behavior for this policy is to allow keyword and plain
:command:`target_link_libraries` signatures to be mixed.  The ``NEW`` behavior for
this policy is to not to allow mixing of the keyword and plain
signatures.

This policy was introduced in CMake version 2.8.12.  CMake version
|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.

.. include:: DEPRECATED.txt
