| 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 |