Найти статью
Autoconf
Autoconf — инструмент для создания программных пакетов, собираемых из исходных текстов. Основная задача Autoconf — устранение различий между операционными системами и предоставление стандартного процесса установки, включающего распаковку исходного архива, сборку (build) программ и установку созданных файлов, с минимальной необходимостью в детальном знании целевой системы.
Autoconf может применяться на системах, где доступны Bourne shell и утилита make. Инструмент поддерживает сборку программ на различных языках программирования, включая C, C++, Fortran, Fortran 77, Erlang и Objective-C.
Скрипт configure запускает серию тестов для адаптации исходных текстов к сборке и установке на конкретной целевой системе. В процессе он генерирует заголовочные файлы и make-файлы (Makefile) из шаблонов. В комплекте с программами Automake и Libtool Autoconf входит в GNU Build System, который также включает ряд вспомогательных инструментов, в том числе Autoheader.
Общие сведения
Что важно знать
| Autoconf | |
|---|---|
| Тип | система автоматической конфигурации сборочных пакетов |
| Автор | Дэвид Маккензи |
| Разработчик | Free Software Foundation |
| Написана на | m4, Bourne shell |
| Интерфейс | командная строка |
| Операционные системы | кроссплатформенное ПО (работает на ОС с Bourne shell и make) |
| Первый выпуск | лето 1991 |
| Последняя версия |
|
| Репозиторий | git.savannah.gnu.org/git… |
| Лицензия | GPL |
| Сайт | gnu.org/software/autocon… |
Назначение программы Autoconf
Autoconf предназначен для создания программных пакетов, собираемых из исходного кода. Обычно такие пакеты распространяются в виде файлов .tar.gz. Autoconf позволяет преодолеть различия между системами, так что для распаковки, сборки и установки пакета достаточно выполнить стандартную последовательность команд:
$ tar zxvf пакет-версия.tar.gz $ cd пакет-версия $ ./configure $ make $ /bin/su - $ make install
История
Autoconf был создан летом 1991 года Дэвидом Маккензи для поддержки своей работы в Free Software Foundation. В последующие годы инструмент был усовершенствован многочисленными авторами и стал наиболее распространённым решением для создания переносимых пакетов в мире свободного ПО.
Философия
Автоконф близок по концепции к пакету Metaconfig, использовавшемуся для Perl, а также к системе imake, применявшейся до версии X11R6.9 для сборки X Window System, однако имеет иную философию.
В области портируемости Autoconf делает акцент на проверке доступности возможностей, а не на определении номеров версий. К примеру, родной компилятор C в SunOS 4 не поддерживал ISO-расширения, однако администратор мог установить совместимый с ISO компилятор. Определить его наличие простым анализом версии системы нельзя, а скрипт configure, полагаясь на тесты возможностей, способен обнаружить нужный компилятор. Такой подход даёт следующие преимущества:
- скрипт configure можно применять даже на новых и неизвестных системах
- если на системе установлены обновлённые версии средств разработки, возможно использовать их преимущества
- отпадает необходимость поддерживать детализированные списки соответствия версий и возможностей
Скрипт configure
К команде ./configure можно добавить параметры — их перечень выводится командой:
$ ./configure --help
Среди важных параметров — --prefix=PREFIX (определяет корневой каталог для установки программ пакета) и --exec-prefix=EPREFIX (каталог для бинарных файлов). Также для задания конкретных директорий существуют параметры:
--bindir=DIR пользовательские исполняемые файлы [EPREFIX/bin] --sbindir=DIR системные утилиты администратора [EPREFIX/sbin] --libexecdir=DIR дополнительные исполняемые файлы [EPREFIX/libexec] --datadir=DIR архитектурно-независимые данные только для чтения [PREFIX/share] --sysconfdir=DIR одноузловые данные только для чтения [PREFIX/etc] --sharedstatedir=DIR изменяемые архитектурно-независимые данные [PREFIX/com] --localstatedir=DIR изменяемые локальные данные [PREFIX/var] --libdir=DIR библиотеки объектного кода [EPREFIX/lib] --includedir=DIR файлы заголовков C [PREFIX/include] --oldincludedir=DIR файлы заголовков C для не-gcc [/usr/include] --infodir=DIR документация info [PREFIX/info] --mandir=DIR документация man [PREFIX/man]
Начиная с версии 1.3 automake, можно использовать переменную окружения при установке:
$ DESTDIR=корень make install
Это позволяет установить структуру файлов в указанный каталог (например, при создании RPM-пакетов или установке на удалённый диск, смонтированный через NFS).
Если пакет поддерживает различные функции или зависимости, можно выбирать их через такие параметры:
--enable-ФУНКЦИЯ --enable-ФУНКЦИЯ=значение --disable-ФУНКЦИЯ --with-ПАКЕТ --without-ПАКЕТ
Дополнительные параметры configure могут задаваться через переменные вида имя=значение — например:
| Переменная | Назначение |
|---|---|
| CC | команда вызова компилятора C |
| CFLAGS | параметры компилятора C |
| LDFLAGS | параметры компоновщика (например, -Lпуть для поиска библиотек вне стандартных директорий) |
| CPPFLAGS | параметры препроцессора C (например, -Iпуть для не-standard заголовочных файлов) |
| CPP | команда для препроцессора C |
Для указания архитектуры применяются параметры --build=АРХИТЕКТУРА; при кросс-компиляции — --host=АРХИТЕКТУРА или --target=АРХИТЕКТУРА.
Программа automake из файла Makefile.am генерирует Makefile.in, после чего autoconf создаёт итоговые файлы без суффикса .in.
Пример использования Autoconf
Пример «Hello, world»:
- Создайте исходный файл
hello.c:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
- Создайте
Makefile.amс содержимым:
bin_PROGRAMS = hello hello_SOURCES = hello.c
- Запустите
autoscan. Будут выведены сообщения об ошибках:
autom4te: configure.ac: no such file or directory autoscan: /usr/bin/autom4te failed with exit status: 1
и созданы autoscan.log и configure.scan:
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([hello.c]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile]) AC_OUTPUT
- Переименуйте
configure.scanвconfigure.acи дополните строкуAC_INITконкретными данными. - Запустите
autoheader; будет созданautom4te.cacheс файламиoutput.0,requests,traces.0иconfig.h.in:
/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION
- В
configure.acпослеAC_INITдобавьте строку:
AM_INIT_AUTOMAKE
- Запустите
aclocal; будет созданaclocal.m4и обновлёнautom4te.cache. - Запустите
automake --add-missing --copy— появятся сообщения:
configure.ac: installing `./install-sh' configure.ac: installing `./missing' Makefile.am: installing `./INSTALL' Makefile.am: required file `./NEWS' not found Makefile.am: required file `./README' not found Makefile.am: required file `./AUTHORS' not found Makefile.am: required file `./ChangeLog' not found Makefile.am: installing `./COPYING' Makefile.am: installing `./depcomp'
и создадутся нужные файлы и обновится кэш.
- Запустите
autoconf; появитсяconfigure. - Для сборки используйте стандартные команды:
$ ./configure $ make $ /bin/su - $ make install
- После изменений в исходных текстах снова выполните
autoscan, обновитеconfigure.acи выполнитеautoreconf.
Критика
Автоконф часто критикуют за использование устаревших технологий, наличие ограничений и сложных для освоения сценариев даже при простых нуждах. К часто выделяемым недостаткам системы относят:
- Сложность использования — для многих проектов требуется многократное повторение одних и тех же действий[2][3].
- Сгенерированный скрипт
configureисполняется в Bourne shell, из-за чего процесс генерацииMakefileможет быть медленным. - Считается, что скрипты
configure, созданные черезautoconf, представляют собой в основном ручной интерфейс командной строки без стандартизации[4]. Несмотря на это, стандарты существуют и их использование становится всё более распространённым[5]. - Для добавления нестандартных проверок требуется освоить относительно малоизвестный макропроцессор M4[4][6].
- Из-за слабой совместимости между версиями приходится использовать обёрточные скрипты[7].
- Автоматически сгенерированные скрипты обычно получаются очень объёмными и иногда сложными для отладки.
По этим причинам ряд проектов, ранее использовавших GNU Build System, перешли на альтернативные инструменты, такие как CMake и SCons[2][8].
Примечания
- ↑ Weinberg Z. autoconf-2.72 released [stable] — 2023.
- ↑ 1 2 Alexander Neundorf. Why the KDE project switched to CMake -- and how (англ.). lwn.net (21 июня 2006). Дата обращения: 13 июня 2024. Архивировано 9 сентября 2025 года.
- ↑ Poul-Henning Kamp. A Generation Lost in the Bazaar (англ.), ACM Queue (15 August 2012). Архивировано 27 сентября 2025 года. Дата обращения: 13 июня 2024.
- ↑ 1 2 Andrew McCall. Stop the autoconf insanity! Why we need a new build system (англ.). freshmeat.net (21 июня 2003). Дата обращения: 13 июня 2024. Архивировано 26 марта 2009 года.
- ↑ GNU Coding Standards (англ.). gnu.org. Дата обращения: 13 июня 2024. Архивировано 3 октября 2025 года.
- ↑ Poul-Henning Kamp. Did you call them autocrap tools? (англ.) (20 апреля 2010). Дата обращения: 10 апреля 2018. Архивировано 11 сентября 2017 года.
- ↑ Thomas Dickey. why i still use autoconf 2.13 (англ.). invisible-island.net. Дата обращения: 13 июня 2024. Архивировано 18 сентября 2025 года.
- ↑ Build Systems (Blender) (англ.). Дата обращения: 13 июня 2024. Архивировано 2 декабря 2008 года.
Ссылки
- Официальный сайт AutoconfAutoconf (англ.). GNU Project. Дата обращения: 13 июня 2024.
- Использование Automake и Autoconf с C++Using Automake and Autoconf with C++ (англ.). Openismus (архив). Дата обращения: 13 июня 2024. Архивировано 13 октября 2004 года.
- Использование библиотек C/C++ с Automake и AutoconfUsing C/C++ libraries with Automake and Autoconf (англ.). Openismus (архив). Дата обращения: 13 июня 2024. Архивировано 13 апреля 2006 года.
- Сайт AutotoolsetAutotoolset home page (англ.). SourceForge. Дата обращения: 13 июня 2024.
- Руководство по Autotools: Autoconf, Automake и LibtoolAutotools: A practitioner's guide to Autoconf, Automake and Libtool (англ.). Free Software Magazine (архив). Дата обращения: 13 июня 2024. Архивировано 16 августа 2014 года.
- Autotools MythbusterAutotools Mythbuster (англ.). Дата обращения: 13 июня 2024.