GNUInstallDirs
Этот модуль определяет переменные каталогов установки в соответствии с Стандартами кодирования GNU и предоставляет команду для вычисления абсолютных путей, связанных с установкой.
Загрузите этот модуль в проекте CMake следующим образом:
include(GNUInstallDirs)
Переменные результата
Подключение этого модуля определяет следующие переменные:
-
CMAKE_INSTALL_<dir> -
Назначение для файлов заданного типа. Это значение можно передать параметрам
DESTINATIONкомандinstall()для соответствующего типа файлов. Это должен быть путь относительно префикса установки, чтобы его можно было преобразовать в абсолютный путь с сохранением возможности перемещения. Однако существуют некоторые особые случаи, описанные ниже.Хотя абсолютные пути разрешены, их не рекомендуется использовать, поскольку они несовместимы с параметром
--prefixкомандыcmake --installи с генераторами установщиковcpack. В частности, нет необходимости делать пути абсолютными, добавляя в началоCMAKE_INSTALL_PREFIX; этот префикс используется по умолчанию, если DESTINATION является относительным путём. -
CMAKE_INSTALL_FULL_<dir> -
Абсолютный путь, полученный из соответствующего значения
CMAKE_INSTALL_<dir>. Если значение ещё не является абсолютным путём, абсолютный путь обычно строится добавлением в начало значения переменнойCMAKE_INSTALL_PREFIX, за исключением особых случаев, описанных ниже.Эти переменные не следует использовать в командах
install(), поскольку они несовместимы с параметром--prefixкомандыcmake --installи с генераторами установщиков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)В Linux, если выполняется не кросс-компиляция, по умолчанию используется зависящий от архитектуры каталог библиотек дистрибутива, например
libилиlib64. В Debian это может бытьlib/<multiarch-tuple>, еслиCMAKE_INSTALL_PREFIXимеет значение/usr. При кросс-компиляции по умолчанию используетсяlib.Примечание
Если во время установки параметру
--prefixзадан альтернативный префикс установки, особый случай с кортежем нескольких архитектур определяется на основе значенияCMAKE_INSTALL_PREFIX, заданного на этапе конфигурации, а не на основе значения альтернативного префикса. -
INCLUDEDIR -
заголовочные файлы C (
include) -
OLDINCLUDEDIR -
заголовочные файлы C для компиляторов, отличных от gcc (
/usr/include) -
DATAROOTDIR -
корневой каталог данных только для чтения, не зависящих от архитектуры (
share) -
DATADIR -
данные только для чтения, не зависящие от архитектуры (
DATAROOTDIR)Для
DATADIRиDATAROOTDIRпредусмотрена отдельная обработка, чтобыDATADIRможно было настроить для специфичных для проекта файлов данных, аDATAROOTDIRоставался без изменений для стандартных расположений данных, не зависящих от архитектуры:INFODIR,LOCALEDIR,MANDIRиDOCDIR. -
INFODIR -
документация info (
DATAROOTDIR/info) -
LOCALEDIR -
данные, зависящие от локали (
DATAROOTDIR/locale) -
MANDIR -
документация man (
DATAROOTDIR/man) -
DOCDIR -
корневой каталог документации (
DATAROOTDIR/doc/PROJECT_NAME)
Если подключающий модуль не задаёт значение, будет использовано указанное выше значение по умолчанию, которое появится в кэше и будет доступно для изменения пользователем.
Если используется значение по умолчанию для CMAKE_INSTALL_<dir> и CMAKE_INSTALL_PREFIX изменяется, будет рассчитано новое значение по умолчанию на основе нового значения CMAKE_INSTALL_PREFIX. Использование --prefix в cmake --install не изменяет эти значения.
Особые случаи
Добавлено в версии 3.4.
Следующие значения CMAKE_INSTALL_PREFIX являются особыми:
/
Для <dir>, отличных от SYSCONFDIR, LOCALSTATEDIR и RUNSTATEDIR, значение CMAKE_INSTALL_<dir> получает префикс usr/, если пользователь не задал его как абсолютный путь. Например, значение INCLUDEDIR include становится usr/include. Это требование Стандартов кодирования GNU, в которых указано:
При сборке полной системы GNU префикс будет пустым, а /usr будет символической ссылкой на /.
Изменено в версии 4.1: Переменные CMAKE_INSTALL_<dir> кэшируются с префиксом usr/. См. политику CMP0193.
/usr
Если <dir> равно SYSCONFDIR, LOCALSTATEDIR или RUNSTATEDIR, значение CMAKE_INSTALL_FULL_<dir> вычисляется добавлением в начало значения CMAKE_INSTALL_<dir> только /, если оно ещё не является абсолютным путём. Например, значение SYSCONFDIR etc становится /etc. Это требование Стандартов кодирования GNU.
Изменено в версии 4.1: Значениями по умолчанию CMAKE_INSTALL_<dir> для <dir>, равного SYSCONFDIR, LOCALSTATEDIR и RUNSTATEDIR, являются абсолютные пути /etc, /var и /var/run соответственно. См. политику CMP0192.
/opt/...
Если <dir> равно SYSCONFDIR, LOCALSTATEDIR или RUNSTATEDIR, значение CMAKE_INSTALL_FULL_<dir> вычисляется добавлением префикса в конец значения CMAKE_INSTALL_<dir>, если оно ещё не является абсолютным путём. Например, значение SYSCONFDIR etc становится /etc/opt/.... Это определено Стандартом иерархии файловой системы.
Это поведение не применяется к путям внутри /opt/homebrew/....
Изменено в версии 4.1: Значениями по умолчанию CMAKE_INSTALL_<dir> для <dir>, равного SYSCONFDIR, LOCALSTATEDIR и RUNSTATEDIR, являются абсолютные пути /etc/opt/..., /var/opt/... и /var/run/opt/... соответственно. См. политику CMP0192.
Примечание
Если во время установки параметру --prefix задан альтернативный префикс установки, эти особые случаи определяются на основе значения CMAKE_INSTALL_PREFIX, заданного на этапе конфигурации, а не на основе значения альтернативного префикса.
Команды
Этот модуль предоставляет следующую команду:
-
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> -
Имя переменной, содержащей путь, который будет использоваться для вычисления соответствующего абсолютного пути установки.
Изменено в версии 4.1: Эта переменная больше не изменяется. См. политику
CMP0193. В предыдущих версиях CMake эта команда изменяла значение переменной<input-var>с учётом особых случаев. -
<dir> -
Добавлено в версии 3.20.
Имя типа каталога, например
SYSCONFDIR,LOCALSTATEDIR,RUNSTATEDIRи т. д. Этот аргумент определяет, применяются ли особые случаи при вычислении абсолютного пути.Изменено в версии 3.20: До появления аргумента
<dir>тип каталога можно было задать, установив переменнуюdirперед вызовом этой команды. Начиная с CMake 3.20, если аргумент<dir>задан явно, переменнаяdirигнорируется.
Хотя этот модуль использует команду внутри себя для вычисления переменных
CMAKE_INSTALL_FULL_<dir>, она также доступна пользователям для создания дополнительных пользовательских переменных путей установки и вычисления абсолютных путей там, где это необходимо, с использованием той же логики. -
См. также
- Команду
install().
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html