Он запускает скрипт, который обычно создает 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 ».