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)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
对于
<dir>等于SYSCONFDIR、LOCALSTATEDIR或RUNSTATEDIR的情况,如果CMAKE_INSTALL_<dir>的值还不是绝对路径,则通过在CMAKE_INSTALL_<dir>的值前添加/来计算CMAKE_INSTALL_FULL_<dir>。例如,SYSCONFDIR值etc将变为/etc。这符合 GNU 编码标准。版本 4.1 中已更改: 对于
<dir>等于SYSCONFDIR、LOCALSTATEDIR和RUNSTATEDIR的情况,CMAKE_INSTALL_<dir>的默认值分别是绝对路径/etc、/var和/var/run。请参阅策略CMP0192。
/opt/...
对于
<dir>等于SYSCONFDIR、LOCALSTATEDIR或RUNSTATEDIR的情况,如果CMAKE_INSTALL_<dir>的值还不是绝对路径,则通过将前缀 *追加* 到CMAKE_INSTALL_<dir>的值来计算CMAKE_INSTALL_FULL_<dir>。例如,SYSCONFDIR值etc将变为/etc/opt/...。这由 Filesystem Hierarchy Standard 定义。此行为不适用于
/opt/homebrew/...下的路径。版本 4.1 中已更改: 对于
<dir>等于SYSCONFDIR、LOCALSTATEDIR和RUNSTATEDIR的情况,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()。