/CMake 3.19


New in version 3.16.

RPATH entries are properly escaped in the intermediary CMake install script.

In CMake 3.15 and earlier, RPATH entries set via CMAKE_INSTALL_RPATH or via INSTALL_RPATH have not been escaped before being inserted into the cmake_install.cmake script. Dynamic linkers on ELF-based systems (e.g. Linux and FreeBSD) allow certain keywords in RPATH entries, such as ${ORIGIN} (More details are available in the ld.so man pages on those systems). The syntax of these keywords can match CMake’s variable syntax. In order to not be substituted (usually to an empty string) already by the intermediary cmake_install.cmake script, the user had to double-escape such RPATH keywords, e.g. set(CMAKE_INSTALL_RPATH "\\\${ORIGIN}/../lib"). Since the intermediary cmake_install.cmake script is an implementation detail of CMake, CMake 3.16 and later will make sure RPATH entries are inserted literally by escaping any coincidental CMake syntax.

The OLD behavior of this policy is to not escape RPATH entries in the intermediary cmake_install.cmake script. The NEW behavior is to properly escape coincidental CMake syntax in RPATH entries when generating the intermediary cmake_install.cmake script.

This policy was introduced in CMake version 3.16. CMake version 3.19.0-rc3 warns when the policy is not set and detected usage of CMake-like syntax and uses OLD behavior. Use the cmake_policy() command to set it to OLD or NEW explicitly.


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

© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.