48 lines
3.8 KiB
Plaintext
48 lines
3.8 KiB
Plaintext
= Программный проект и иерархия каталогов
|
||
:title-separator: {sp}|
|
||
:category: Программирование
|
||
:tags: Linux, программирование, cmake
|
||
|
||
Для операционных систем типа Linux принят стандарт
|
||
https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии файловой
|
||
системы»), унифицирующий местонахождение файлов и каталогов с общим
|
||
назначением в файловой системе. Полная текущая версия стандарта
|
||
находится http://refspecs.linuxfoundation.org/fhs.shtml[здесь].
|
||
|
||
В соответствии с данным стандартом, а также принятыми в ведущих
|
||
дистрибутивах правилами размещения исполняемых файлов в каталогах
|
||
пользователей, можно выделить следующие типы расположения:
|
||
|
||
* системная иерархия в каталоге `/usr` используется для установки
|
||
бинарных пакетов для данного дистрибутива;
|
||
|
||
* системная иерархия в каталоге `/usr/local` используется для установки
|
||
программного обеспечения системным администратором без использования
|
||
пакетов (не рекомендуется для использования из-за проблем поддержки
|
||
в актуальном состоянии);
|
||
|
||
* системная иерархия в каталоге `/opt` используется для установки
|
||
стороннего программного обеспечения. В рамках данной иерархии
|
||
предполагается, что каждый программный продукт располагается в
|
||
собственном каталоге. При таком типе сборки обычно используются
|
||
дополнительные методы (статическая компоновка, включение в состав
|
||
пакета своего набора динамических библиотек) для обеспечения работы
|
||
пакета в операционных системам с отличающимся составом библиотек
|
||
и другим циклом обновления;
|
||
|
||
* системная иерархия в домашнем каталоге пользователя не имеет
|
||
определённого стандарта, обычно производители дистрибутивов
|
||
предлагают использовать для исполняемых файлов каталоги
|
||
`$HOME/bin` или `$HOME/.local/bin`.
|
||
|
||
Система автоматизации сборки программного обеспечения `CMake` позволяет
|
||
организовать окружение подобное перечисленным выше. На этапе сборки
|
||
проекта можно создать структуру каталогов, которая будет отвечать
|
||
требованиям по логическому разделению файлов на исполняемые,
|
||
заголовочные, библиотеки, файлы настроек и т.д.
|
||
|
||
Для обеспечения единообразной работы вне зависимости от варианта
|
||
иерархии каталогов, в которой находится исполняемый файл, можно
|
||
выполнять автоматическую настройку на работу в текущем окружении.
|
||
|