CMP0166¶
3.30 版本新增。
TARGET_PROPERTY 会传递性地解析静态库私有依赖项的链接属性。
在 CMake 3.29 及更早版本中,TARGET_PROPERTY 生成器表达式会像解析 传递性编译属性 一样解析 INTERFACE_LINK_OPTIONS、INTERFACE_LINK_DIRECTORIES 和 INTERFACE_LINK_DEPENDS 属性,而不是像解析 传递性链接属性 一样,即使策略 CMP0099 被设置为 NEW。静态库的私有依赖项,出现在其由 LINK_ONLY 生成器表达式保护的 INTERFACE_LINK_LIBRARIES 中,不会被跟随。这与在构建系统生成期间解析相同目标属性的行为不一致。
CMake 3.30 及更高版本倾向于让 TARGET_PROPERTY 将 INTERFACE_LINK_OPTIONS、INTERFACE_LINK_DIRECTORIES 和 INTERFACE_LINK_DEPENDS 属性作为 传递性链接属性 解析,从而跟随静态库的私有依赖项,这些依赖项出现在其由 LINK_ONLY 生成器表达式保护的 INTERFACE_LINK_LIBRARIES 中。此策略为未更新以期望新行为的项目提供了兼容性。
此策略的 OLD 行为是让 TARGET_PROPERTY 将 INTERFACE_LINK_OPTIONS、INTERFACE_LINK_DIRECTORIES 和 INTERFACE_LINK_DEPENDS 属性按 传递性编译属性 解析,即不跟随静态库的私有依赖项。此策略的 NEW 行为是按 传递性链接属性 解析它们,即跟随静态库的私有依赖项。
此策略引入于 CMake 版本 3.30。它可以通过 cmake_policy() 或 cmake_minimum_required() 设置。如果未设置,CMake *不会* 警告,并使用 OLD 行为。
注意
策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。