CMP0023

普通签名和关键字 target_link_libraries() 签名不能混合。

CMake 2.8.12 使用 PUBLICPRIVATEINTERFACE 关键字引入了 target_link_libraries() 签名,以概括引入的 LINK_PUBLICLINK_PRIVATE 关键字在 CMake 2.8.7 中。将签名与这些关键字中的任何一个一起使用会显式设置目标的链接接口,即使是空的。当与普通 target_link_libraries() 签名的历史行为结合使用时,这会产生令人困惑的行为。例如,考虑以下代码:

target_link_libraries(mylib A)
target_link_libraries(mylib PRIVATE B)

在第一行之后,链接接口没有明确设置,因此 CMake 将使用链接实现 A 作为链接接口。但是,第二行将链接界面设置为空。为了避免这种微妙的行为,CMake 现在更倾向于禁止将 target_link_libraries() 的普通签名和关键字签名混合用于单个目标。

此策略的“旧”行为是允许混合使用关键字和纯 target_link_libraries() 签名。此策略的“新”行为是不允许混合使用关键字和普通签名。

此策略是在 CMake 版本 2.8.12 中引入的。 CMake 版本 |发布|当未设置策略并使用“旧”行为时发出警告。使用 cmake_policy() 命令将其显式设置为 OLDNEW

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。