CMP0192¶
在 4.1 版本中新增。
GNUInstallDirs 在特殊前缀下使用绝对路径的 SYSCONFDIR、LOCALSTATEDIR 和 RUNSTATEDIR。
GNUInstallDirs 模块记录了 SYSCONFDIR、LOCALSTATEDIR 和 RUNSTATEDIR 的特殊情况。当 CMAKE_INSTALL_PREFIX 是一个特殊前缀(例如 /usr)时,这些目录的绝对路径可能位于前缀之外(例如 /etc、/var 和 /var/run)。
在 CMake 4.0 及更早版本中,对于 <dir> 等于 SYSCONFDIR、LOCALSTATEDIR 和 RUNSTATEDIR 的 CMAKE_INSTALL_<dir> 变量,其默认值始终使用相对路径(etc、var、var/run),并且特殊情况仅在计算 CMAKE_INSTALL_FULL_<dir> 变量的绝对路径时实现。CMake 4.1 及以上版本倾向于在 CMAKE_INSTALL_PREFIX 是特殊前缀时,为 <dir> 等于 SYSCONFDIR、LOCALSTATEDIR 和 RUNSTATEDIR 的 CMAKE_INSTALL_<dir> 变量默认使用绝对路径。此策略提供了与未更新为期望此行为的项目兼容性。
此策略的 OLD 行为是默认将 CMAKE_INSTALL_<dir> 变量设置为相对路径。此策略的 NEW 行为是,当 CMAKE_INSTALL_PREFIX 是特殊前缀时,为 <dir> 等于 SYSCONFDIR、LOCALSTATEDIR 和 RUNSTATEDIR 的 CMAKE_INSTALL_<dir> 变量默认设置为绝对路径。
此策略在第一次调用 include(GNUInstallDirs) 时生效。后续调用 include(GNUInstallDirs) 会重用第一次调用的缓存 CMAKE_INSTALL_<dir> 值。
此策略是在 CMake 版本 4.1 中引入的。它可以由 cmake_policy() 或 cmake_minimum_required() 命令设置。如果未设置,CMake **不会** 警告,并使用 OLD 行为。
注意
策略的 OLD 行为 根据定义已被弃用,并可能在未来的 CMake 版本中被移除。