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 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. It may be set by cmake_policy() or cmake_minimum_required(). If it is not set, CMake warns when it detects use of CMake-like syntax, and uses OLD behavior.


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