Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

Как за 3 легких шага собрать ПО для Linux из исходников

Сборка программного обеспечения из исходного кода может показаться сложнее, чем использование пакетного менеджера. Однако три простых команды делают этот процесс достаточно удобным. Программы, которые вы запускаете на компьютере, могут быть интерпретируемыми и скомпилированными. Первые представляют собой текстовые файлы с кодом, который считывается и выполняется другой программой — интерпретатором. Скомпилированные программы же предоставляют собой самостоятельные бинарные файлы с машинным кодом, которые исполняются напрямую. Скомпилированные исполняемые файлы достаточно распространены, особенно для крупных программ. При сборке из исходников с помощью компилятора, такого как gcc, создается исполняемый файл из исходного кода приложения, который может состоять из нескольких отдельных файлов. 90-е остались в прошлом. Сборка из исходников может быть сложной и времязатратной, поэтому для автоматизации этого процесса обычно используется другая программа, чаще всего Make. Вы можете создать ma
Оглавление

Краткий обзор

Сборка программного обеспечения из исходного кода может показаться сложнее, чем использование пакетного менеджера. Однако три простых команды делают этот процесс достаточно удобным.

Что такое сборка из исходников?

Программы, которые вы запускаете на компьютере, могут быть интерпретируемыми и скомпилированными. Первые представляют собой текстовые файлы с кодом, который считывается и выполняется другой программой — интерпретатором. Скомпилированные программы же предоставляют собой самостоятельные бинарные файлы с машинным кодом, которые исполняются напрямую.

Скомпилированные исполняемые файлы достаточно распространены, особенно для крупных программ. При сборке из исходников с помощью компилятора, такого как gcc, создается исполняемый файл из исходного кода приложения, который может состоять из нескольких отдельных файлов.

Сборка ядра Linux больше не потребуется

90-е остались в прошлом.

Сборка из исходников может быть сложной и времязатратной, поэтому для автоматизации этого процесса обычно используется другая программа, чаще всего Make. Вы можете создать makefiles, чтобы управлять тем, как проект собирает свое конечное исполняемое приложение.

В более сложных проектах makefiles могут стать огромными и трудными для управления. Это особенно касается переносимых приложений, которые должны работать на разных архитектурах и в различных средах. Для таких случаев многие проекты автоматически генерируют свои makefiles с помощью инструмента под названием autoconf/automake.

Процесс сборки в 3 шага: Настройка, Компиляция, Установка

Суть процесса заключается в том, что многие программы следуют стандартному порядку сборки из исходников:

Многие популярные приложения придерживаются этого порядка или его вариаций, включая Apache, который описывает процесс в своем INSTALL файле:

-2

Node.js — еще один пример программного обеспечения, использующего этот порядок. В его файле BUILDING.md содержатся соответствующие инструкции:

-3

Каждый проект использует свой собственный подход к сборке исходников, даже если это простая вариация трехшагового процесса. Главное отличие заключается в том, как вы запускаете команды. Выполнение с логическим оператором AND (&&) остановит последовательность, если одно из действий не выполнится:

С другой стороны, вы можете выполнять каждую команду отдельно, используя одну строку, разделенную точками с запятой:

Таким образом, каждая часть выполнится, даже если предыдущие шаги завершились неудачей. Ваш выбор может не иметь критического значения, и вы также можете выполнить их как три отдельные команды:

Если вы не хотите устанавливать ПО полностью и предпочитаете запускать его прямо из каталога, это вполне нормально; просто пропустите команду make install.

Некоторые репозитории включают скрипт configure, в то время как другие (например, grep) ожидают, что вы сначала запустите другой скрипт для генерации файла configure. Если вы ищете самый простой способ, обязательно обратитесь к фалам INSTALL, BUILD или README и следуйте рекомендациям проекта.

Как ./configure запускает процесс

Скрипт configure, как правило, является отправной точкой сборочного процесса. Он настраивает дальнейшие действия для вашей конкретной среды.

Скрипт проверяет различные зависимости, необходимые проекту. Он обеспечивает наличие всех нужных компонентов и их правильных версий. После запуска ./configure вы должны получить файл с названием Makefile, который будет использован на следующем этапе.

Скрипт configure также поддается настройке через параметры командной строки. Запустите ./configure --help, чтобы узнать все доступные опции.

Как configure, так и make генерируют множество выводов. Если вам просто нужно запустить эти команды, игнорируя их внутреннее выполнение, можете использовать опцию --quiet, чтобы сократить вывод.

Если скрипта configure нет, проект может предложить способ его генерации. Например, репозиторий htop включает скрипт autogen.sh. Запуск этого скрипта создаст файл configure:

-4

Простые проекты и те, которые не написаны на языке C, могут вовсе не иметь скрипта configure. В таком случае трехшаговый процесс становится двухшаговым: просто выполните make && make install.

Скрипт configure часто управляет дальнейшими действиями во время установки. В частности, распространенной является опция --prefix, которая задает корневой каталог для установки программного обеспечения. По умолчанию это /usr/local, но вы можете выбрать другой путь, если хотите организовать файлы иначе.

make выполняет основную работу

После того как configure сгенерировал makefile, вы можете начать реальный процесс сборки ПО. Программа make читает makefile и проверяет набор правил, чтобы определить, что нужно собрать.

Созданные вручную makefiles обычно довольно понятные, когда вы привыкнете к их синтаксису. В самом простом случае makefile описывает, как создать один файл из другого, если последний устарел. Например, этот makefile описывает процесс сборки очень простой программы:

Здесь исполняемый файл program зависит от исходного файла program.c. Когда выполняется make, он проверяет файл на наличие зависимостей. Если с момента последней сборки ничего не изменилось — т.е. program новее, чем program.c — make просто завершит работу, уверенный, что делать больше нечего. Однако если program.c изменился, он вызовет gcc и скомпилирует программу.

Что такое makefiles и как с ними работать?

Не притворяйтесь, а создавайте!

Кроме описанного простого случая, в make доступно множество других функций, и сгенерированные makefiles, как правило, существенно сложнее. Например, этот сгенерированный makefile для программы htop содержит 2440 строк:

-5

Но вас это не должно беспокоить. Если вы не собираетесь модифицировать исходный код или писать свой собственный, вы можете запускать make, не задумываясь о том, что происходит за кулисами.

Этап make может занять много времени, особенно для сложного ПО, состоящего из нескольких компонентов. Будьте терпеливы и не паникуйте, если make не удастся. Причина обычно кроется в недостатке зависимостей, и одно из преимуществ make заключается в том, что он продолжает процесс сборки, не теряя выполненной работы.

Завершение с помощью make install

Обычная сборка создает скомпилированный исполняемый файл, который находится либо в корневом каталоге проекта, либо чаще всего в подкаталоге с названием bin. Это обычно автономная программа, которую можно запустить по полному пути:

-6

Это нормально для тестирования или работы над своим собственным ПО, однако позже вам все равно захочется установить его в более подходящее место.

Большинство makefiles имеют целевой режим install, который будет проверяться при запуске make install. Обычно это подразумевает использование команды install для копирования отдельных файлов и установки нужных прав и владельца.

Место установки будет зависеть от того, как вы запускали configure. Учтите, что по умолчанию исполняемые файлы находятся в /usr/local/bin, на что у вас могут не быть прав записи. Если ваш пользователь не имеет права записывать в директорию установки, вам потребуется выполнить sudo make install и ввести пароль root для продолжения.

Какое бы ни было место установки, оно должно входить в ваш PATH, чтобы вы могли запускать программу, просто вводя ее название в командной строке, а не полный путь.

Как добавить директорию в ваш $PATH в Linux

Не добавляйте всё в ваш PATH. Серьезно.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Вы также можете найти наши материалы в: