CMP0177

在版本 3.31 中添加。

install() DESTINATION 路径已规范化。

install() 命令有着多种不同的形式,且其中大多数接受 DESTINATION 关键字,有些则在多个位置接受。CMake 3.30 及更早版本将 DESTINATION 关键字后给出的值按原样使用,不进行任何变换。计算相对于 DESTINATION 的路径时,install(EXPORT) 表单假定路径不包含 ... 路径组件,如果项目提供的路径违反了该假设,则计算出的路径将不正确。

CMake 3.31 规范了在 install() 命令的任何形式中给出的所有 DESTINATION 值,install(TARGETS) 表单的 INCLUDES DESTINATION 除外。执行的规范与 cmake_path() 命令的规范相同(参见 规范化)。

此策略的 OLD 行为对任何 install() 命令的 DESTINATION 值不执行任何转换。它们按原样使用。如果目标路径包含 ... 路径组件,则 install(EXPORT) 将使用与 CMake 3.30 及更早版本相同的错误路径。

NEW 行为将规范除 INCLUDES DESTINATION 之外的所有 DESTINATION 值。如果目标路径包含生成器表达式,则该表达式将包装在一个 $<PATH:CMAKE_PATH,NORMALIZE,...> 生成器表达式中。

此策略在 CMake 版本 3.31 中引入。它可通过 cmake_policy()cmake_minimum_required() 设置。如果它未设置,当 CMake 检测到路径(如果已规范化,路径将会不同)时会发出警告,并使用 OLD 行为。如果目标路径包含生成器表达式,则无论值如何,都不会发出此类警告。

注意

策略的 OLD 行为 根据定义已弃用,并且在将来的某个 CMake 版本中可能会将其移除。