Что делает типичный ./configure в Linux? - PullRequest
63 голосов
/ 27 марта 2010

Зачем это нужно, хотя все указано в make-файле?

Ответы [ 3 ]

62 голосов
/ 27 марта 2010

Обычно сценарий конфигурирования при запуске будет:

  • Проверьте некоторые детали о машине на котором программное обеспечение будет установлены. Этот скрипт проверяет много зависимостей в вашей системе. Для конкретного программного обеспечения для работы правильно, это может потребовать много вещей, которые будут существовать на вашем машина уже. Если в вашей системе отсутствуют какие-либо основные требования, сценарий конфигурирования будет exit, и вы не сможете продолжить установку, пока не получите требуемые вещи.

  • Создайте Makefile для использования на следующем шаге.

32 голосов
/ 27 марта 2010

Он запускает скрипт, который обычно создает make-файлы и "configure.h".

Сценарий написан на языке "m4", который является макроязыком. Макросы верхнего уровня находятся в autoconf.ac или (в старых системах) autoconf.in. Это расширение, содержащее макросы более низкого уровня, которые, в свою очередь, расширяются до реальных тестов, которые создают небольшие программы или задачи, чтобы проверить, какая у вас система.

Например, AC_CHECK_HEADER ([myheader.h], ...) может сгенерировать крошечную программу на C, например:

#include "myheader.h"
int main(int argc, char** argv) {
  return 0;
}

Если программа компилируется, проверка считается «проходящей», иначе она «не проходит». Статус таких проверок часто отражается в файле config.h. При прохождении проверки вы можете найти строку в config.h, которая выглядит следующим образом:

#define HAVE_MYHEADER_H 1

во время теста, который не проходит, он может выглядеть как

#define HAVE_MYHEADER_H 0

Когда настроен для работы с autoconf в макросе AM_INIT_AUTOMAKE, Makefile может также ссылаться на результаты тестов, если экспортируется переменная, содержащая результат теста. Поэтому, если необходимая библиотека находится в нескольких типичных местах, или синтаксис «что работает» с одним из ваших стандартных инструментов (таких как tar, ar и т. Д.) Отличается, или предпочтительный инструмент недоступен, Makefile будет все еще в состоянии правильно построить проект, используя различные местоположения библиотеки, другой синтаксис инструмента или другой набор инструментов.

Таким образом, при работе с проектом Autotools (настройка / сборка / сборка установки) Makefile действительно не содержит всего необходимого для сборки проекта, он генерируется из шаблона Makefile.in, чтобы точно соответствовать вашей системе при вводе «configure ».

5 голосов
/ 27 марта 2010

Сценарий configure строит Makefile из шаблона, подставляя в него такие вещи, как место, где вы хотите установить код, и какие определения необходимы для компилятора (C, C ++, Fortran, ...), который используется для сборки программы. , Теоретически все это можно сделать за один шаг, за исключением того, что существует множество различных конфигураций, которые проще выполнять поэтапно. (Например, если создается большая программа с доступным многоядерным компьютером, вы можете указать, что происходит определенное количество параллельных компиляций, что не имеет значения, как все настроено.)

...