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.
Note
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.
https://cmake.org/cmake/help/v3.19/policy/CMP0095.html