Back to Cmake

CMP0177

Help/policy/CMP0177.rst

4.3.21.8 KB
Original Source

CMP0177

.. versionadded:: 3.31

:command:install DESTINATION paths are normalized.

The :command: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 :command: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 :command:install command, except for the INCLUDES DESTINATION of the :command:install(TARGETS) form. The normalization performed is the same as for the :command:cmake_path command (see :ref:Normalization).

The OLD behavior of this policy performs no translation on the DESTINATION values of any :command:install command. They are used exactly as provided. If a destination path contains .. or . path components, :command: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 :command:cmake_policy or :command: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.

.. include:: include/DEPRECATED.rst