CMP0095¶
3.16 版新增。
在中间 CMake 安装脚本中,RPATH
条目被正确转义。
在 CMake 3.15 及更早版本中,通过 CMAKE_INSTALL_RPATH
或 INSTALL_RPATH
设置的 RPATH
条目在被插入到 cmake_install.cmake
脚本之前没有被转义。基于 ELF 的系统(例如 Linux 和 FreeBSD)上的动态链接器允许在 RPATH
条目中使用某些关键字,例如 ${ORIGIN}
(在这些系统的 ld.so
man 页中有更详细的说明)。这些关键字的语法可能与 CMake 的变量语法匹配。为了不被中间的 cmake_install.cmake
脚本(通常替换为空字符串)替换,用户必须对这些 RPATH
关键字进行双重转义,例如 set(CMAKE_INSTALL_RPATH "\\\${ORIGIN}/../lib")
。由于中间的 cmake_install.cmake
脚本是 CMake 的一个实现细节,CMake 3.16 及更高版本将通过转义任何偶然匹配的 CMake 语法来确保 RPATH
条目被字面插入。
此策略的 OLD
行为是在中间 cmake_install.cmake
脚本中不转义 RPATH
条目。此策略的 NEW
行为是在生成中间 cmake_install.cmake
脚本时,正确转义 RPATH
条目中偶然匹配的 CMake 语法。
此策略在 CMake 版本 3.16 中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
进行设置。如果未设置,CMake 会在检测到使用类似 CMake 的语法时发出警告,并使用 OLD
行为。
注意
OLD
行为的策略是按照定义已被弃用
,并可能在 CMake 的未来版本中被移除。