GNUInstallDirs¶
本模块根据 GNU 编码标准定义安装目录变量,并提供一个命令来计算与安装相关的绝对路径。
在 CMake 项目中加载此模块,使用
include(GNUInstallDirs)
结果变量¶
包含此模块将定义以下变量
CMAKE_INSTALL_<dir>给定类型文件的目标。此值可以传递给
install()命令的DESTINATION选项,用于相应的 文件类型。它应该是一个相对于安装前缀的路径,以便可以以可重定位的方式转换为绝对路径。但是,有一些 特殊情况,如下所述。虽然允许使用绝对路径,但不建议使用,因为它们不适用于
cmake --install命令的--prefix选项,也 不适用于cpack安装程序生成器。特别是,无需通过 在CMAKE_INSTALL_PREFIX前面添加前缀来使路径变为绝对路径;如果 DESTINATION 是相对路径,则默认使用此 前缀。CMAKE_INSTALL_FULL_<dir>由相应的
CMAKE_INSTALL_<dir>值生成的绝对路径。如果该值本身不是绝对路径,则通常 通过在CMAKE_INSTALL_PREFIX变量的值前面添加前缀来构造绝对路径,但 特殊情况 除外,如下所述。这些变量不应在
install()命令中使用,因为它们不适用于cmake --install命令的--prefix选项,也 不适用于cpack安装程序生成器。
其中 <dir> 是以下之一
BINDIR用户可执行文件 (
bin)SBINDIR系统管理员可执行文件 (
sbin)LIBEXECDIR程序可执行文件 (
libexec)SYSCONFDIR只读单机数据 (
etc)4.1 版本更改:如果
CMAKE_INSTALL_PREFIX属于 特殊情况,则默认路径是所述的绝对路径变体。请参阅策略CMP0192。SHAREDSTATEDIR可修改的独立于体系结构的数据 (
com)LOCALSTATEDIR可修改的单机数据 (
var)4.1 版本更改:如果
CMAKE_INSTALL_PREFIX属于 特殊情况,则默认路径是所述的绝对路径变体。请参阅策略CMP0192。RUNSTATEDIR运行时可变数据 (
LOCALSTATEDIR/run)版本 3.9 中添加。
4.1 版本更改:如果
CMAKE_INSTALL_PREFIX属于 特殊情况,则默认路径是所述的绝对路径变体。请参阅策略CMP0192。LIBDIR目标代码库 (
lib或lib64)在 Debian 上,当
CMAKE_INSTALL_PREFIX是/usr时,这可能是lib/<multiarch-tuple>。INCLUDEDIRC 头文件 (
include)OLDINCLUDEDIR非 GCC 的 C 头文件 (
/usr/include)DATAROOTDIR只读独立于体系结构的数据根 (
share)DATADIR只读独立于体系结构的数据 (
DATAROOTDIR)INFODIR信息文档 (
DATAROOTDIR/info)LOCALEDIR与区域设置相关的数据 (
DATAROOTDIR/locale)MANDIRman 文档 (
DATAROOTDIR/man)DOCDIR文档根目录 (
DATAROOTDIR/doc/PROJECT_NAME)
如果包含者未定义值,则将使用上述默认值,并且该值将出现在缓存中供用户编辑。
如果使用了 CMAKE_INSTALL_<dir> 的默认值并且 CMAKE_INSTALL_PREFIX 发生更改,则将基于新的 CMAKE_INSTALL_PREFIX 值计算新的默认值。在 cmake --install 中使用 --prefix 不会更改这些值。
特殊情况¶
3.4 版本新增。
CMAKE_INSTALL_PREFIX 的以下值是特殊的
/
/usr
/opt/...
对于等于
SYSCONFDIR、LOCALSTATEDIR或RUNSTATEDIR的<dir>,如果CMAKE_INSTALL_<dir>的值不是绝对路径,则通过在CMAKE_INSTALL_<dir>的值后面**追加**前缀来计算CMAKE_INSTALL_FULL_<dir>。例如,SYSCONFDIR值etc变为/etc/opt/...。这是由 文件系统层次结构标准定义的。此行为不适用于
/opt/homebrew/...下的路径。4.1 版本更改:对于等于
SYSCONFDIR、LOCALSTATEDIR和RUNSTATEDIR的<dir>,CMAKE_INSTALL_<dir>的默认值分别是绝对路径/etc/opt/...、/var/opt/...和/var/run/opt/...。请参阅策略CMP0192。
命令¶
此模块提供以下命令
- GNUInstallDirs_get_absolute_install_dir¶
3.7 版本中新增。
从给定相对路径计算绝对安装路径
GNUInstallDirs_get_absolute_install_dir(<result-var> <input-var> <dir>)
此命令从变量
<input-var>中获取值,并根据 GNU 标准安装目录计算其绝对路径。如果输入路径是相对路径,则会在其前面添加CMAKE_INSTALL_PREFIX,并可根据上述 特殊情况 进行调整。参数为
<result-var>用于存储计算出的绝对路径的变量名称。
<input-var>包含将用于计算其关联绝对安装路径的路径的变量名称。
<dir>在 3.20 版本中添加。
目录类型名称,例如
SYSCONFDIR、LOCALSTATEDIR、RUNSTATEDIR等。此参数决定了计算绝对路径时是否应用 特殊情况。3.20 版本更改:在引入
<dir>参数之前,可以通过在调用此命令之前设置dir变量来指定目录类型。从 CMake 3.20 开始,如果明确提供了<dir>参数,则忽略dir变量。
虽然此命令在此模块内部用于计算
CMAKE_INSTALL_FULL_<dir>变量,但它也公开暴露,供用户创建额外的自定义安装路径变量,并在必要时使用相同的逻辑计算绝对路径。
另请参阅¶
install()命令。