GNUInstallDirs¶
此模块根据 GNU 编码标准 定义安装目录变量,并提供一个用于计算与安装相关的绝对路径的命令。
在 CMake 项目中加载此模块,使用
include(GNUInstallDirs)
结果变量¶
引入此模块会定义以下变量
CMAKE_INSTALL_<dir>给定类型文件的目标路径。此值可以传递给
install()命令的DESTINATION选项以对应相应的文件类型。它应当是相对于安装前缀(installation prefix)的路径,以便以可重定位的方式转换为绝对路径。然而,如下文所述,存在一些特殊情况。虽然允许使用绝对路径,但不建议这样做,因为它们无法与
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>。注意
当在安装时使用
--prefix选项指定了替代安装前缀时,多架构元组的特殊情况将基于配置时的CMAKE_INSTALL_PREFIX进行评估,而不是基于替代前缀的值。INCLUDEDIRC 头文件(
include)OLDINCLUDEDIR非 GCC 的 C 头文件(
/usr/include)DATAROOTDIR只读架构无关数据根目录(
share)DATADIR只读架构无关数据(
DATAROOTDIR)DATADIR和DATAROOTDIR是分开处理的,以便可以针对特定项目的数据文件自定义DATADIR,同时DATAROOTDIR对标准架构无关位置(INFODIR、LOCALEDIR、MANDIR和DOCDIR)保持不变。INFODIRinfo 文档(
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
对于等于
SYSCONFDIR、LOCALSTATEDIR或RUNSTATEDIR的<dir>,如果CMAKE_INSTALL_<dir>本身不是绝对路径,则通过仅在其值前加上/来计算CMAKE_INSTALL_FULL_<dir>。例如,SYSCONFDIR的值etc将变为/etc。这是 GNU 编码标准 所要求的。4.1 版本变更:对于等于
SYSCONFDIR、LOCALSTATEDIR和RUNSTATEDIR的<dir>,CMAKE_INSTALL_<dir>的默认值分别为绝对路径/etc、/var和/var/run。参见策略CMP0192。
/opt/...
对于等于
SYSCONFDIR、LOCALSTATEDIR或RUNSTATEDIR的<dir>,如果CMAKE_INSTALL_<dir>本身不是绝对路径,则通过*追加*前缀来计算CMAKE_INSTALL_FULL_<dir>。例如,SYSCONFDIR的值etc将变为/etc/opt/...。这是由 文件系统层次结构标准 (FHS) 定义的。此行为不适用于
/opt/homebrew/...下的路径。4.1 版本变更:对于等于
SYSCONFDIR、LOCALSTATEDIR和RUNSTATEDIR的<dir>,CMAKE_INSTALL_<dir>的默认值分别为绝对路径/etc/opt/...、/var/opt/...和/var/run/opt/...。参见策略CMP0192。
注意
当在安装时使用 --prefix 选项指定了替代安装前缀时,这些特殊情况将基于配置时的 CMAKE_INSTALL_PREFIX 进行评估,而不是基于替代前缀的值。
命令¶
此模块提供以下命令
- 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()命令。