CMP0177ΒΆ

New 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.