GNUInstallDirs

定义 GNU 标准安装目录

提供安装目录变量,如 GNU 编码标准 中所定义。

结果变量

包含此模块会定义以下变量

CMAKE_INSTALL_<dir>

给定类型的文件目标。此值可以传入 DESTINATION install() 命令的选项,用于指定相应文件类型。它应该是相对于安装前缀的路径,以便可以将其转换成可重定位的绝对路径。

虽然允许使用绝对路径,但它们不推荐使用,因为它们不能在 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

SHAREDSTATEDIR

可修改的与架构无关的数据(com

LOCALSTATEDIR

可修改的单机数据(var

RUNSTATEDIR

在 3.9 版本中添加:运行时变量数据 (LOCALSTATEDIR/run)

LIBDIR

目标代码库 (liblib64)

在 Debian 上,当 CMAKE_INSTALL_PREFIX/usr 时,可能是 lib/<multiarch-tuple>

INCLUDEDIR

C 头文件 (include)

OLDINCLUDEDIR

非 gcc 的 C 头文件 (/usr/include)

DATAROOTDIR

只读独立于架构的数据根 (share)

DATADIR

只读独立于架构的数据 (DATAROOTDIR)

INFODIR

信息文档 (DATAROOTDIR/info)

LOCALEDIR

取决于语言环境的数据 (DATAROOTDIR/locale)

MANDIR

man 文档 (DATAROOTDIR/man)

DOCDIR

文档根 (DATAROOTDIR/doc/PROJECT_NAME)

如果包含方不定义值,将使用上所示的默认值,且该值将出现在缓存中,以便用户编辑。

特殊情况

在 3.4 版本中添加。

以下 CMAKE_INSTALL_PREFIX 值为特殊值

/

对于非 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR<dir>CMAKE_INSTALL_<dir> 的值以 usr/ 为前缀,前提是并未将其用户指定为绝对路径。例如,INCLUDEDIRinclude 变为 usr/include。这是 GNU 编码标准 所必需的,该标准陈述

构建完整的 GNU 系统时,前缀将为空且 /usr 将是 / 的符号链接。

/usr

对于等于 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR<dir>CMAKE_INSTALL_FULL_<dir> 的计算方法是,如果并未将其用户指定为绝对路径,则仅在前缀 /CMAKE_INSTALL_<dir> 的值前面。例如,SYSCONFDIRetc 变为 /etc。这是 GNU 编码标准 所必需的。

/opt/...

对于 <dir> 等于 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR,如果 CMAKE_INSTALL_<dir> 未被用户指定为绝对路径,则 CMAKE_INSTALL_FULL_<dir> 通过追加前缀到 CMAKE_INSTALL_<dir> 的值来计算。例如,SYSCONFDIRetc 变为 /etc/opt/...。这是由 文件系统分层标准 定义的。

此行为不适用于 /opt/homebrew/... 下的路径。

GNUInstallDirs_get_absolute_install_dir
GNUInstallDirs_get_absolute_install_dir(absvar var dirname)

在版本 3.7 中添加。

将给定的变量 absvar 设置为变量 var 中包含的绝对路径。这是为了允许计算绝对路径,并考虑上面记录的所有特殊情况。虽然此宏用于计算各种 CMAKE_INSTALL_FULL_<dir> 变量,但它公开提供,以允许创建其他路径变量的用户在必要时使用相同的逻辑来计算绝对路径。 dirname 是要获取的目录名,例如 BINDIR

在版本 3.20 中更改:添加了 <dirname> 参数。以前版本的 CMake 通过变量 ${dir} 传递此值。