GNU 安装目录

定义 GNU 标准安装目录

提供由“GNU 编码标准”定义的安装目录变量。

结果变量

包含此模块定义了以下变量:

CMAKE_INSTALL_<目录>

给定类型文件的目的地。该值可以传递给相应文件类型的 install() 命令的 DESTINATION 选项。它通常应该是相对于安装前缀的路径,以便可以以可重定位的方式将其转换为绝对路径(请参阅 CMAKE_INSTALL_FULL_<dir>)。但是,也允许使用绝对路径。

CMAKE_INSTALL_FULL_<目录>

从相应的 CMAKE_INSTALL_<dir> 值生成的绝对路径。如果该值还不是绝对路径,则通常通过在 CMAKE_INSTALL_PREFIX 变量的值前添加绝对路径来构造绝对路径。但是,有一些“特殊情况”_,如下所述。

其中 <dir> 是以下之一:

BINDIR

用户可执行文件(bin

SBINDIR

系统管理员可执行文件(sbin

LIBEXECDIR

程序可执行文件(libexec

SYSCONFDIR

只读单机数据(etc

共享状态目录

可修改的独立于架构的数据(com

本地状态目录

可修改的单机数据(var

RUNSTATEDIR

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

LIBDIR

目标代码库(liblib64

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

包括目录

C 头文件(include

OLDINCLUDEDIR

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

数据根目录

只读架构独立数据根(share

数据目录

只读架构独立数据(DATAROOTDIR

INFODIR

信息文档(DATAROOTDIR/info

本地目录

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

曼迪尔

man 文档(DATAROOTDIR/man

DOCDIR

文档根目录(DATAROOTDIR/doc/PROJECT_NAME

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

特别案例

在 3.4 版本加入.

CMAKE_INSTALL_PREFIX 的以下值是特殊的:

/

对于除了``SYSCONFDIR``、LOCALSTATEDIR 和``RUNSTATEDIR`` 之外的``<dir>``,CMAKE_INSTALL_<dir> 的值以``usr/`` 为前缀,如果它不是用户指定的绝对路径。例如,INCLUDEDIR 值``include`` 变为``usr/include``。这是`GNU 编码标准`_ 所要求的,其中规定:

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

/usr

对于等于“SYSCONFDIR”、“LOCALSTATEDIR”或“RUNSTATEDIR”的“<dir>”,“CMAKE_INSTALL_FULL_<dir>”是通过在值前加上“/”来计算的``CMAKE_INSTALL_<dir>`` 如果它不是用户指定的绝对路径。例如,SYSCONFDIR 值``etc`` 变成``/etc``。这是`GNU 编码标准`_ 所要求的。

/选择/...

对于 <dir> 等于 SYSCONFDIRLOCALSTATEDIRRUNSTATEDIRCMAKE_INSTALL_FULL_<dir> 是通过*附加*前缀到 ` CMAKE_INSTALL_<dir>` 如果它不是用户指定的绝对路径。例如,SYSCONFDIR 值``etc`` 变成``/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}”传递这个值。