GNUInstallDirs¶
Define GNU standard installation directories
Provides install directory variables as defined by the GNU Coding Standards.
Result Variables¶
Inclusion of this module defines the following variables:
CMAKE_INSTALL_<dir>
Destination for files of a given type. This value may be passed to the
DESTINATION
options ofinstall()
commands for the corresponding file type. It should be a path relative to the installation prefix so that it can be converted to an absolute path in a relocatable way.While absolute paths are allowed, they are not recommended as they do not work with the
cmake --install
command's--prefix
option, or with thecpack
installer generators. In particular, there is no need to make paths absolute by prependingCMAKE_INSTALL_PREFIX
; this prefix is used by default if the DESTINATION is a relative path.
CMAKE_INSTALL_FULL_<dir>
The absolute path generated from the corresponding
CMAKE_INSTALL_<dir>
value. If the value is not already an absolute path, an absolute path is constructed typically by prepending the value of theCMAKE_INSTALL_PREFIX
variable. However, there are some special cases as documented below.These variables shouldn't be used in
install()
commands as they do not work with thecmake --install
command's--prefix
option, or with thecpack
installer generators.
where <dir>
is one of:
BINDIR
user executables (
bin
)SBINDIR
system admin executables (
sbin
)LIBEXECDIR
program executables (
libexec
)SYSCONFDIR
read-only single-machine data (
etc
)SHAREDSTATEDIR
modifiable architecture-independent data (
com
)LOCALSTATEDIR
modifiable single-machine data (
var
)RUNSTATEDIR
Добавлено в версии 3.9: run-time variable data (
LOCALSTATEDIR/run
)LIBDIR
object code libraries (
lib
orlib64
)On Debian, this may be
lib/<multiarch-tuple>
whenCMAKE_INSTALL_PREFIX
is/usr
.INCLUDEDIR
C header files (
include
)OLDINCLUDEDIR
C header files for non-gcc (
/usr/include
)DATAROOTDIR
read-only architecture-independent data root (
share
)DATADIR
read-only architecture-independent data (
DATAROOTDIR
)INFODIR
info documentation (
DATAROOTDIR/info
)LOCALEDIR
locale-dependent data (
DATAROOTDIR/locale
)MANDIR
man documentation (
DATAROOTDIR/man
)DOCDIR
documentation root (
DATAROOTDIR/doc/PROJECT_NAME
)
If the includer does not define a value the above-shown default will be used and the value will appear in the cache for editing by the user.
Special Cases¶
Добавлено в версии 3.4.
The following values of CMAKE_INSTALL_PREFIX
are special:
/
For
<dir>
other than theSYSCONFDIR
,LOCALSTATEDIR
andRUNSTATEDIR
, the value ofCMAKE_INSTALL_<dir>
is prefixed withusr/
if it is not user-specified as an absolute path. For example, theINCLUDEDIR
valueinclude
becomesusr/include
. This is required by the GNU Coding Standards, which state:When building the complete GNU system, the prefix will be empty and
/usr
will be a symbolic link to/
.
/usr
For
<dir>
equal toSYSCONFDIR
,LOCALSTATEDIR
orRUNSTATEDIR
, theCMAKE_INSTALL_FULL_<dir>
is computed by prepending just/
to the value ofCMAKE_INSTALL_<dir>
if it is not user-specified as an absolute path. For example, theSYSCONFDIR
valueetc
becomes/etc
. This is required by the GNU Coding Standards.
/opt/...
For
<dir>
equal toSYSCONFDIR
,LOCALSTATEDIR
orRUNSTATEDIR
, theCMAKE_INSTALL_FULL_<dir>
is computed by appending the prefix to the value ofCMAKE_INSTALL_<dir>
if it is not user-specified as an absolute path. For example, theSYSCONFDIR
valueetc
becomes/etc/opt/...
. This is defined by the Filesystem Hierarchy Standard.This behavior does not apply to paths under
/opt/homebrew/...
.
Macros¶
- GNUInstallDirs_get_absolute_install_dir¶
GNUInstallDirs_get_absolute_install_dir(absvar var dirname)
Добавлено в версии 3.7.
Set the given variable
absvar
to the absolute path contained within the variablevar
. This is to allow the computation of an absolute path, accounting for all the special cases documented above. While this macro is used to compute the variousCMAKE_INSTALL_FULL_<dir>
variables, it is exposed publicly to allow users who create additional path variables to also compute absolute paths where necessary, using the same logic.dirname
is the directory name to get, e.g.BINDIR
.Изменено в версии 3.20: Added the
<dirname>
parameter. Previous versions of CMake passed this value through the variable${dir}
.