Что делает типичная. /configure в Linux?

Почему это необходимо, хотя все указано в make файле?

Ответ 1

Обычно при запуске configure script будет:

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

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

Ответ 2

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

script записывается в lanugage "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 (configure/make/make install) Makefile действительно не содержит всего необходимого для сборки проекта, он генерируется из шаблона Makefile.in, чтобы точно соответствовать вашей системе при вводе "configure".

Ответ 3

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