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` 行为将标准化所有 `DESTINATION` 值,但 `INCLUDES DESTINATION` 除外。如果目标路径包含生成器表达式,它将被包装在一个 `$<PATH:CMAKE_PATH,NORMALIZE,...>` 生成器表达式中。

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

注意

策略的 `OLD` 行为定义上已被弃用,并可能在未来的 CMake 版本中被移除。