What does a typical ./configure do in Linux?
It also provides an interface to configure (aptly) compilation options. ./configure —help will (usually?) give a list of available options.
It runs a script which typically produces makefiles and «configure.h».
The script is written in the lanugage «m4» which is a macro language. The top level macros are found in autoconf.ac or (in older systems) autoconf.in. These expand containing lower level macros which in turn expand into actual tests which create small programs or tasks to check what kind of system you have.
For example AC_CHECK_HEADER([myheader.h], . ) might generate a tiny C program like:
#include "myheader.h" int main(int argc, char** argv)
If the program compiles, the check is considered «passing» otherwise it «fails». The status of such checks often gets reflected in the config.h file. On a passing check, you might find a line in config.h that looks like:
while on a test that fails, it might look like
When configured to work with autoconf in AM_INIT_AUTOMAKE macro, the Makefile can also reference the results of the tests if the variable containing the test result is exported. So if a needed library is located a few different typical locations, or the syntax of «what works» with one of your standard tools (like tar, ar, etc) is different, or the preferred tool is not available, the Makefile will be able to still build the project properly using the different library locations, the different tool syntax, or a different set of tools.
So when dealing with an Autotools project (configure / make / make install) the Makefile really doesn’t contain everything necessary to build the project, it’s generated from the Makefile.in template to specifically match your system when you type «configure».
Чарующая магия configure, make и make install
Это небольшая заметка для начинающих линуксоидов, о том что же означают эти три замечательные команды и для чего одни нужны. Начнём, как говорится, с начала. Большинство программ перед использованием надо скомпилировать, то есть преобразовать из текста понятного человеку в набор единиц и нулей, понятных компьютеру. Процесс условно разделён на три этапа: конфигурирование (configure), сборка (make) и установка (make install). Подробности под катом 🙂
./configure
Данная команда выполняет поиск необходимых для компиляции библиотек и заголовочных файлов (это для программ частично или полностью написанных на C/C++ и подобных языков), а так же настройку особых параметров или подключение специальных библиотек, в случае если ./configure обнаружит всё что ему нужно, он создаст Makefiles — файл, необходимый для сборки программы
Выполнить настройку параметров конфигуратора можно при помощи ключей и аргументов этих самых ключей, например:
./configure —prefix=/opt/my_program
При помощи ключа —prefix= Вы можете указать директорию, которая в дальнейшем будет выступать как префикс для вашей программы (то есть корневая директория). Это связанно с тем что в мире Linux и не только, существует специальная Иерархия Файловой Системы (HFS) в соответствии с которой любая программа, чтобы работать без ошибок, должна быть собрана и установлена.
В файловой системе есть три основных префикса, относительно которых большинство программ конфигурируется, а именно:
- / — корневая директория операционной системы, так называемый ROOT
- /usr — директория, в которой находятся приложения пользовательского окружения
- /usr/local — дополнительная директория для пользовательских программ, собираемых вручную, специально для того чтобы операционная система не превратилась в свалку
Если открыть любую из этих директорий, то можно увидеть очень схожую структуру, как минимум там будут папки: bin, etc, include, libs, sbin.
Если запустить ./configure без ключей, то префиксом по умолчанию (директория, в которую будет установлена собираемая программа) будет /usr/local, помните это если не можете запустить свою программу, возможно у Вас не прописан путь в PATH.
Кроме ключа —prefix в конфигураторе, как правило, имеется ещё множество других ключей, посмотреть их все можно если выполнить:
./configure —help
make
Самая важная и простая команда/программа, выполняет запуск процедуры компиляции приложения из исходного кода. Для своей работы данная программа использует специальные файлы Makefiles, в которых подробно описан процесс сборки приложения со всеми параметрами, которые мы указали конфигуратору. Результатом успешного выполнения команды make будет собранная программа в текущей директории.
make install
Данная команда выполняет непосредственную установку приложения в указанную, на этапе конфигурирования, директорию, после выполнения команды make install вы можете запустить свежеустановленную программу.
Послесловие
Чтобы не писать три команды по очереди можно написать их в одну строку:
./configure && make && make install
&& — это оператор И пришедший из языка C/C++, однако, с точки зрения оболочки он означает то, что следующую команду нужно выполнить только в случае успешного выполнения предыдущей команды, это очень удобно если один из этапов завершается с ошибкой.
На самом деле make install так же может выполнить сборку, потому как задача install зависит от задачи all (то есть непосредственно сборки приложения), это означает что этап make можно пропустить и выполнить всего две команды, если записать их в одну строку получится:
./configure && make install
Удачи Вам! И спасибо за то что дочитали!
⌨️ Введение в команду “./configure”: Компиляция исходного кода на Linux
Команда ./configure – это распространенный способ конфигурирования и подготовки исходного кода программного обеспечения к компиляции в системах Linux.
Эта команда обычно выполняется перед командой make, которая собственно и компилирует программное обеспечение.
Понимание опций, доступных в команде ./configure, может дать вам больше контроля над процессом компиляции и помочь вам настроить сборку под ваши конкретные нужды.
Когда вы запускаете скрипт ./configure, он выполняет несколько задач по подготовке исходного кода к компиляции.
Некоторые из основных задач, которые он выполняет, включают в себя:
- Проверка наличия зависимостей: Скрипт проверяет, установлены ли в системе необходимые зависимости, такие как библиотеки и инструменты. Если какие-либо зависимости отсутствуют, сценарий обычно сообщает об этом и останавливает процесс конфигурирования.
- Настройка параметров конфигурации: Скрипт позволяет задать различные параметры конфигурации, такие как расположение библиотек, тип установки и функции, которые должны быть включены в скомпилированное программное обеспечение.
- Создание make-файлов: После установки зависимостей и параметров конфигурации скрипт создает make-файлы, которые используются командой make для компиляции программного обеспечения. Make-файлы содержат информацию о том, как скомпилировать программу, например, расположение исходных файлов, опции, которые нужно передать компилятору, и зависимости.
- Выполнение некоторых базовых тестов: Скрипт также выполняет некоторые базовые тесты системы, чтобы убедиться, что система совместима с устанавливаемым программным обеспечением. Сюда входят тесты архитектуры системы, операционной системы и других специфических для системы деталей.
Запуск скрипта ./configure
В Linux системные пакеты могут быть установлены с помощью менеджера пакетов, а также могут быть скомпилированы из исходного кода.
Большинство исходных текстов содержат скрипт ./configure, который подготавливает исходный текст и систему перед началом компиляции.
После успешного завершения ./configure вы увидите Make-файлы, созданные в вашей системе, которые будут использоваться `make` для компиляции исходного кода и установки на вашу машину.
Вы можете увидеть файл, созданный скриптом ./configure, с помощью команды ls.
Общие параметры для ./configure
Самое основное использование команды ./configure – просто запустить ее без каких-либо опций.
Это позволит проверить наличие зависимостей и настроить сборку на использование параметров по умолчанию.
Опция –prefix позволяет указать каталог, в который будет установлено программное обеспечение.
По умолчанию программа обычно устанавливается в /usr/local/, но при желании вы можете указать другой каталог.
Например, чтобы установить программное обеспечение в /usr/local/mysoftware/, выполните следующую команду:
./configure --prefix=/usr/local/mysoftware/
Опции –with-package и –without-package позволяют указать внешние зависимости, от которых зависит программное обеспечение.
Эти опции можно использовать для указания местоположения определенных библиотек, например –with-ssl=/usr/local/ssl.
Опцию –enable-debug можно использовать для включения отладочной информации во время компиляции.
Это может быть полезно для устранения неполадок и отладки программ.
Опцию –help можно использовать для просмотра списка всех доступных опций для команды ./configure.
Кроме того, вы можете использовать переменные окружения CFLAGS и LDFLAGS для передачи флагов компилятору и компоновщику.
Например, чтобы включить дополнительные флаги оптимизации при компиляции, вы можете выполнить следующую команду:
CFLAGS="-O3" LDFLAGS="-O3" ./configure
Заключение
В заключение следует отметить, что команда ./configure является важным шагом в процессе компиляции программного обеспечения в системах Linux.
Понимание опций, доступных с помощью этой команды, может дать вам больше контроля над процессом компиляции и помочь вам настроить сборку под ваши конкретные нужды.
Важно всегда проверять наличие опций в документации к программному обеспечению, прежде чем использовать их.
Также важно отметить, что представленные выше опции являются лишь примерами, и каждый пакет программного обеспечения может иметь различные опции.
Всегда рекомендуется проверять документацию к программному обеспечению для получения наиболее точной и актуальной информации о доступных опциях для команды ./configure.