CMP0177

在 3.31 版本中添加。

install() DESTINATION 路径被规范化。

install() 命令有多种不同的形式,其中大多数都带有 DESTINATION 关键字,有些形式中不止一处。CMake 3.30 及更早版本使用 DESTINATION 关键字后给出的值,不进行任何转换。install(EXPORT) 形式假定路径在计算相对于 DESTINATION 的路径时,不包含 ... 路径组件,如果项目提供的路径违反了该假设,则计算出的路径将不正确。

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 的未来版本中移除。