Компиляция пакетов из исходников в Debian
Для сборки программ из исходных кодов в GNU/Linux используется (в основном) программа make, которая запускает инструкции из Makefile, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Утилита использует специальные make-файлы, в которых указаны зависимости файлов друг от друга и правила для их удовлетворения. На основе информации о времени последнего изменения каждого файла make определяет и запускает необходимые программы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile.
make [ -f make-файл ] [ цель ] ...
Файл ищется в текущем каталоге. Если ключ -f не указан, используется имя по умолчанию для make-файла — Makefile (однако, в разных реализациях make кроме этого могут проверяться и другие файлы, например GNUmakefile).
make открывает make-файл, считывает правила и выполняет команды, необходимые для создания указанной цели.
Стандартные цели для сборки дистрибутивов GNU:
all — выполнить сборку пакета;
install — установить пакет из дистрибутива (производит копирование исполняемых файлов, библиотек и документации в системные каталоги);
uninstall — удалить пакет (производит удаление исполняемых файлов и библиотек из системных каталогов);
clean — очистить дистрибутив (удалить из дистрибутива объектные и исполняемые файлы, созданные в процессе компиляции);
distclean — очистить все созданные при компиляции файлы и все вспомогательные файлы, созданные утилитой ./configure в процессе настройки параметров компиляции дистрибутива.
По умолчанию make использует самую первую цель в make-файле.
В процессе сборки приложений BSD часто применяют:
depend — выполнить компиляцию/выстраивание зависимостей.
Программа make выполняет команды согласно правилам, указанным в специальном файле. Этот файл называется make-файл (makefile, мейкфайл). Как правило, make-файл описывает, каким образом нужно компилировать и компоновать программу.
make-файл состоит из правил и переменных. Правила имеют следующий синтаксис:
цель1 цель2 ...: реквизит1 реквизит2 ... команда1 команда2 ...
Правило представляет собой набор команд, выполнение которых приведёт к сборке файлов-целей из файлов-реквизитов.
Правило сообщает make, что файлы, получаемые в результате работы команд (цели) являются зависимыми от соответствующих файлов-реквизитов. make никак не проверяет и не использует содержимое файлов-реквизитов, однако, указание списка файлов-реквизитов требуется только для того, чтобы make убедилась в наличии этих файлов перед началом выполнения команд и для отслеживания зависимостей между файлами.
Обычно цель представляет собой имя файла, который генерируется в результате работы указанных команд. Целью также может служить название некоторого действия, которое будет выполнено в результате выполнения команд (например, цель clean в make-файлах для компиляции программ обычно удаляет все файлы, созданные в процессе компиляции).
Строки, в которых записаны команды, должны начинаться с символа табуляции.
Установка
Для установки команды make, в debian устанавлием пакет build-essential, который содержит в себе все необходимые пакеты для компиляции. Ещё нужны autoconf и automake.
Итак, чтобы собрать что-то из исходников, нужно сначала собрать конфигуратор; как собрать конфигуратор, описано в файле configure.in. Для сборки конфигуратора необходимо выполнить
CheckInstall
CheckInstall — компьютерная программа для Unix-подобных операционных систем, созданная с целью облегчить установку и удаление программного обеспечения, скомпилированного из исходных кодов, используя при этом родную для дистрибутива систему управления пакетами. После компиляции программного обеспечения checkinstall может автоматически сгенерировать Slackware-, RPM- или Debian-совместимый пакет, который впоследствии может быть полностью удалён через соответствующий менеджер пакетов. Эта возможность является предпочтительной при установке любых пакетов.
Данная чудесная утилита, будучи запущенной вместо make install задаст несколько вопросов, после чего сама соберёт и установит пакет. Всё, при обновлении никаких проблем с вычисткой старого хлама у вас не будет.
----------------
Столкнулся при работе программы с ошибкой:
ranlib: could not create temporary file whilst writing archive: No more archived files
Решение — создать вручную каталог\структуру каталогов, который не смогла создать команда ranlib.
----------------
Whereis - команда, позволяющая узнать в какие директории установлен пакет, например
# whereis mc
mc: /usr/bin/mc /etc/mc /usr/lib/mc /usr/lib64/mc /usr/share/mc /usr/share/man/man1/mc.1.gz