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

info 文档 (DATAROOTDIR/info)

LOCALEDIR

与区域设置相关的数据 (DATAROOTDIR/locale)

MANDIR

man 文档 (DATAROOTDIR/man)

DOCDIR

文档根目录 (DATAROOTDIR/doc/PROJECT_NAME)

如果包含器未定义值,则将使用上面显示的默认值,并且该值将显示在缓存中以供用户编辑。

特殊情况

3.4 版本新增。

以下 CMAKE_INSTALL_PREFIX 的值是特殊的

/

对于 <dir>,除了 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR,如果 CMAKE_INSTALL_<dir> 的值未被用户指定为绝对路径,则会添加前缀 usr/。 例如,INCLUDEDIRinclude 变为 usr/include。 这是 GNU 编码标准 所要求的,该标准声明

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

/usr

对于等于 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR<dir>,如果 CMAKE_INSTALL_<dir> 的值未被用户指定为绝对路径,则 CMAKE_INSTALL_FULL_<dir> 通过仅预先添加 / 到该值来计算。 例如,SYSCONFDIRetc 变为 /etc。 这是 GNU 编码标准 所要求的。

/opt/...

对于等于 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIR<dir>,如果 CMAKE_INSTALL_<dir> 的值未被用户指定为绝对路径,则 CMAKE_INSTALL_FULL_<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} 传递此值。