Потому что каждый шаг делает разные вещи
Подготовить (настроить) среду для сборки
./configure
В этом скрипте есть множество опций, которые вам следует изменить. Вроде --prefix
или --with-dir=/foo
. Это означает, что каждая система имеет свою конфигурацию. Также ./configure
проверяет наличие недостающих библиотек, которые необходимо установить. Если здесь что-то не так, ваше приложение не будет создано . Вот почему в дистрибутивах есть пакеты, которые устанавливаются в разных местах, потому что каждый дистрибутив считает, что лучше устанавливать определенные библиотеки и файлы в определенные каталоги. Говорят, что он работает ./configure
, но на самом деле его следует менять всегда.
Например, посмотрите сайт пакетов Arch Linux . Здесь вы увидите, что любой пакет использует другой параметр конфигурации (предположим, что они используют автоинструменты для системы сборки).
Построение системы
make
Это на самом деле make all
по умолчанию. И у каждой модели есть свои действия. Кто-то занимается сборкой, кто-то тестирует после сборки, кто-то проверяет данные из внешних репозиториев SCM. Обычно вам не нужно указывать какие-либо параметры, но, опять же, некоторые пакеты выполняют их по-другому.
Установить в систему
make install
Это устанавливает пакет в место, указанное с помощью configure. Если вы хотите, вы можете указать ./configure
ссылку на свой домашний каталог. Однако многие параметры настройки указывают на /usr
или /usr/local
. Это означает, что вы должны использовать его, sudo make install
потому что только root может копировать файлы в / usr и / usr / local.
Теперь вы видите, что каждый шаг является предварительным требованием для следующего шага. Каждый шаг - это подготовка к тому, чтобы все работало беспроблемно. Дистрибутивы используют эту метафору для создания пакетов (например, RPM, deb и т. Д.).
Здесь вы увидите, что каждый шаг на самом деле является отдельным состоянием. Вот почему у менеджеров пакетов разные обертки. Ниже приведен пример оболочки, которая позволяет вам собрать весь пакет за один шаг. Но помните, что у каждого приложения есть своя оболочка (на самом деле эти оболочки имеют такие имена, как spec, PKGBUILD и т. Д.):
def setup:
... #use ./configure if autotools is used
def build:
... #use make if autotools is used
def install:
... #use make all if autotools is used
Здесь можно использовать автоинструменты, то есть ./configure
, make
и make install
. Но другой может использовать SCons, настройку, связанную с Python, или что-то другое.
Как видите, разделение каждого состояния значительно упрощает обслуживание и развертывание, особенно для разработчиков пакетов и дистрибутивов.