CMP0177 — CMake 4.3.0 Documentation

# CMP0177

Added in version 3.31.

`install()` `DESTINATION` paths are normalized.

The `install()` command has a number of different forms, and most of them take a `DESTINATION` keyword, some in more than one place. CMake 3.30 and earlier used the value given after the `DESTINATION` keyword as provided with no transformations. The `install(EXPORT)` form assumes the path contains no `..` or `.` path components when computing a path relative to the `DESTINATION`, and if the project provided a path that violated that assumption, the computed path would be incorrect.

CMake 3.31 normalizes all `DESTINATION` values given in any form of the `install()` command, except for the `INCLUDES DESTINATION` of the `install(TARGETS)` form. The normalization performed is the same as for the `cmake_path()` command (see Normalization).

The `OLD` behavior of this policy performs no translation on the `DESTINATION` values of any `install()` command. They are used exactly as provided. If a destination path contains `..` or `.` path components, `install(EXPORT)` will use the same wrong paths as CMake 3.30 and earlier.

The `NEW` behavior will normalize all `DESTINATION` values except for `INCLUDES DESTINATION`. If a destination path contains a generator expression, it will be wrapped in a `$<PATH:CMAKE_PATH,NORMALIZE,...>` generator expression.

This policy was introduced in CMake version 3.31. It may be set by `cmake_policy()` or `cmake_minimum_required()`. If it is not set, CMake will warn if it detects a path that would be different if normalized, and uses `OLD` behavior. If a destination path contains a generator expression, no such warning will be issued regardless of the value.

Note

The `OLD` behavior of a policy is deprecated by definition and may be removed in a future version of CMake.