Autoconf и Automake были предназначены для решения эволюционной проблемы Unix.
Поскольку Unix развивался в разных направлениях, разработчики, которые хотели переносимого кода, имели тенденцию писать код следующим образом:
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
Поскольку Unix был разветвлен в различных реализациях (BSD, SystemV, многие вендоры, а затем Linux и другие Unix-подобные системы), для разработчиков стало важно писать переносимый код для написания кода, который зависит не от конкретной марки операционной системы. , но о возможностях, предоставляемых операционной системой. Это важно, потому что версия Unix представит новую функцию, например, системный вызов «send», и позже другие операционные системы примут его. Вместо спагетти кода, который проверял бренды и версии, разработчики начали исследовать возможности, поэтому код стал:
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
Большинство файлов README для компиляции исходного кода еще в 90-х годах указывали разработчикам, чтобы они редактировали файл config.h и комментировали, какие надлежащие функции доступны в системе, или отправляли стандартные файлы config.h для каждой протестированной конфигурации операционной системы.
Этот процесс был и громоздким, и подвержен ошибкам, и именно так возник Autoconf. Вы должны думать об Autoconf как о языке, состоящем из команд оболочки со специальными макросами, которые могли заменить процесс редактирования файла config.h человеком с помощью инструмента, который проверял функциональность операционной системы.
Обычно вы пишете свой пробный код в файле configure.ac, а затем запускаете команду autoconf, которая компилирует этот файл в исполняемую команду configure, которую вы видели ранее.
Поэтому, когда вы запускаете, ./configure && make
вы проверяете функции, доступные в вашей системе, а затем строите исполняемый файл с обнаруженной конфигурацией.
Когда проекты с открытым исходным кодом начали использовать системы управления исходным кодом, имело смысл проверить файл configure.ac, но не результат компиляции (configure). Autogen.sh - это всего лишь небольшой скрипт, который вызывает компилятор autoconf с правильными аргументами команды для вас.
-
Automake также выросла из существующих практик в сообществе. Проект GNU стандартизировал обычный набор целей для Makefiles:
make all
построит проект
make clean
удалит все скомпилированные файлы из проекта
make install
установит программное обеспечение
- такие вещи, как
make dist
и make distcheck
подготовили бы исходный код к распространению и проверили бы, что результатом был полный пакет исходного кода
- и так далее...
Создание совместимых make-файлов стало обременительным, потому что было много шаблонов, которые повторялись снова и снова. Таким образом, Automake был новым компилятором, который интегрировался с autoconf и обрабатывал «исходный» Makefile (названный Makefile.am) в Makefile, который затем можно было передавать в Autoconf.
Цепочка инструментов automake / autoconf на самом деле использует ряд других вспомогательных инструментов, и они дополняются другими компонентами для других конкретных задач. По мере роста сложности выполнения этих команд по порядку возникла необходимость в готовом к запуску сценарии, и именно отсюда появился autogen.sh.
Насколько я знаю, Gnome был проектом, который ввел использование этого вспомогательного скрипта autogen.sh