CMP0023

警告

此策略的 OLD 行为已在 CMake 4.0 版本中移除。此策略必须通过调用 cmake_minimum_required()cmake_policy() 设置为 NEW

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

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

target_link_libraries(mylib A)
target_link_libraries(mylib PRIVATE B)

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

此策略的 OLD 行为是允许混合使用关键字和普通 target_link_libraries() 签名。此策略的 NEW 行为是不允许混合使用关键字签名和普通签名。

此策略在 CMake 2.8.12 版本中引入。在 CMake 4.0 版本中移除之前,可以通过 cmake_policy()cmake_minimum_required() 进行设置。如果未设置,CMake 会发出警告,并使用 OLD 行为。