CMP0095 — CMake 3.27.7 Documentation

# CMP0095

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

Note

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