Plain and keyword
target_link_libraries() signatures cannot be mixed.
CMake 2.8.12 introduced the
target_link_libraries() signature using the
INTERFACE keywords to generalize the
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
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
target_link_libraries() for a single target.
OLD behavior for this policy is to allow keyword and plain
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 3.19.0-rc3 warns when the policy is not set and uses
OLD behavior. Use the
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.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.