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>
。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
)
如果包含者未定义值,则将使用上述默认值,并且该值将出现在缓存中供用户编辑。
如果使用了 CMAKE_INSTALL_<dir>
的默认值并且 CMAKE_INSTALL_PREFIX
发生更改,则将基于新的 CMAKE_INSTALL_PREFIX
值计算新的默认值。在 cmake --install
中使用 --prefix
不会更改这些值。
特殊情况¶
3.4 版本新增。
CMAKE_INSTALL_PREFIX
的以下值是特殊的
/
/usr
/opt/...
对于等于
SYSCONFDIR
、LOCALSTATEDIR
或RUNSTATEDIR
的<dir>
,如果CMAKE_INSTALL_<dir>
的值不是绝对路径,则通过在CMAKE_INSTALL_<dir>
的值后面**追加**前缀来计算CMAKE_INSTALL_FULL_<dir>
。例如,SYSCONFDIR
值etc
变为/etc/opt/...
。这是由 文件系统层次结构标准定义的。此行为不适用于
/opt/homebrew/...
下的路径。4.1 版本更改:对于等于
SYSCONFDIR
、LOCALSTATEDIR
和RUNSTATEDIR
的<dir>
,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()
命令。