From Wikipedia, the free encyclopedia
Autoconf je nástroj pro vytváření softwarových balíčků kompilovaných ze zdrojových textů. Usiluje o překlenutí rozdílů mezi různými systémy a umožňuje, aby činnost při instalaci, která zahrnuje rozbalení distribučního archivu se zdrojovými texty, překlad (build) programů a instalaci vytvořených souborů, bylo možné provést pevnou posloupností příkazů, a pokud možno bez detailních znalostí cílového systému.
Vývojář | Projekt GNU |
---|---|
Aktuální verze | 2.72 (22. prosince 2023) |
Operační systém | UN*X |
Vyvíjeno v | m4 |
Typ softwaru | programátorský nástroj, knihovna a GNU balíček |
Licence | GNU General Public License, version 3.0 or later |
Web | www |
Některá data mohou pocházet z datové položky. |
Autoconf je použitelný na systémech, na kterých je dostupný Bourne shell a program make. Lze jej používat pro build programů v různých programovacích jazycích, např. C, C++, Fortran, Fortran 77, Erlang nebo Objective-C.
Skript configure spouští řadu testů, pomocí kterých přizpůsobí zdrojové texty pro build a instalaci na konkrétní cílový systém. Pro přizpůsobení spouští na cílovém systému řadu testů, na jejichž základě vygeneruje hlavičkové soubory a soubory Makefile ze šablon. Autoconf spolu s programy Automake a Libtool tvoří GNU Build System, který zahrnuje několik dalších nástrojů, především Autoheader.
Autoconf je nástroj pro vytváření softwarových balíčků kompilovaných ze zdrojových textů. Balíčky jsou zpravidla šířeny jako .tar.gz soubory. Autoconf by měl správci balíčku umožnit překlenout rozdíly mezi různými systémy, takže pro rozbalení, překlad a nainstalování balíčku by mělo stačit zadat příkazy:
$ tar zxvf balíček-verze.tar.gz
$ cd balíček-verze
$ ./configure
$ make
$ /bin/su -
$ make install
Autoconf vytvořil v létě 1991 David Mackenzie pro podporu své práce v Free Software Foundation. V následující letech byla do autoconfu zahrnuta vylepšení od množství autorů a stal se nejpoužívanějším nástrojem pro vytváření přenositelných balíčků ve světě svobodného softwaru.
Autoconf se podobá balíčku Metaconfig používanému jazykem Perl. Velmi podobným nástrojem je také systém imake používaný do verze X11R6.9 pro build X Window System, který však má jinou filozofii.
Přístup Autoconfu k přenositelnosti je testovat dostupnost funkčností, nikoli čísla verzí. Například nativní překladač jazyka C na SunOS 4 nepodporuje ISO rozšíření. Ale uživatel nebo správce mohl na počítač nainstalovat ISO C-kompatibilní překladač. Přítomnost ISO překladače jazyka C nelze odhalit na základě testování verze systému, ale při testování vlastností je skript configure schopen ISO překladač jazyka C objevit. Tento přístup přináší následující výhody:
Příkaz ./configure
může doplněn parametry; jejich seznam se vypíše zadáním
$ ./configure --help
Mezi důležité parametry patří --prefix=PREFIX
, udávající, v jakém stromě adresářů budou umístěny soubory potřebné pro provozování programů z balíčku a --exec-prefix=EPREFIX
, udávající, v jakém stromě adresářů budou umístěny binární programy. Konkrétní jména adresářů lze zadat pomocí parametrů—bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man]
Od verze 1.3 automake navíc umožňuje zadáním
$ DESTDIR=kořen make install
při instalaci předřadit před PREFIX
a EPREFIX
jméno adresáře, do kterého má být celá struktura souborů instalována (což je vhodné při vytváření RPM balíčků nebo instalaci na disk jiného počítače zpřístupněný pomocí například NFS jako adresář kořen
).
Pokud balíček umožňuje vytvářet varianty s různou funkčností nebo předpokládající přítomnost určitého balíku na cílovém systém, lze tyto varianty vybírat pomocí—enable-VLASTNOST—enable-VLASTNOST=hodnota—disable-VLASTNOST—with-BALÍK—without-BALÍK
Další parametry je možné skriptu configure
dodat pomocí parametrů tvaru jméno=hodnota
– například
CC | příkaz volající překladač jazyka C |
CFLAGS | příznaky (řádkové parametry) pro překladač jazyka C |
LDFLAGS | příznaky (řádkové parametry) pro linker (např. -Ladresář, pokud se má program linkovat s knihovnami umístěnými v nestandardním adresáři) |
CPPFLAGS | příznaky (řádkové parametry) pro preprocesor jazyka C (např. -Iadresář, pokud program používá hlavičkové soubory umístěné v nestandardním adresáři) |
CPP | příkaz fungující jako C preprocesor |
Pro zadání architektury lze použít parametry --build=ARCHITEKTURA
, při křížovém překladu --host=ARCHITEKTURA
nebo
--target=ARCHITEKTURA
.
Program automake
vytváří ze souboru Makefile.am
soubor Makefile.in
, autoconf
vytváří z *.in souborů soubory bez .in.
Program "Hello, world":
hello.c
:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Makefile.am
obsahující řádek bin_PROGRAMS
se jmény všech binárních programů v projektu oddělená mezerami. Pro každý program je použit řádek jméno_SOURCES
obsahující seznam zdrojových souborů (*.c i *.h), které jsou potřeba k vytvoření programu:
bin_PROGRAMS = hello hello_SOURCES = hello.c
autoscan
. Vypíše chyby:
autom4te: configure.ac: no such file or directory autoscan: /usr/bin/autom4te failed with exit status: 1
a vytvoří autoscan.log
a configure.scan
obsahující:
# -*- 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
na configure.ac
a doplníme informace do řádku AC_INIT
autoheader
. Vytvoří adresář autom4te.cache
se soubory output.0
, requests
a traces.0
a soubor config.h.in
s obsahem:
/* 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
přidáme za řádek AC_INIT
řádek
AM_INIT_AUTOMAKE
aclocal
; vytvoří aclocal.m4
a v adresáři autom4te.cache
soubory traces.1
a output.1
a aktualizuje requests
automake --add-missing --copy
; vypíše
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'
a vytvoří soubory install-sh
, missing
, INSTALL
, COPYING
, depcomp
a Makefile.in
. Doplní do utom4te.cache
soubory traces.2
a output.2
a aktualizuje soubor requests
.
autoconf
; aktualizuje soubor requests
a vytvoří skript configure
.
$ ./configure
$ make
$ /bin/su -
$ make install
autoscan
; porovnat configure.scan
s configure.ac
, aktualizovat configure.ac
a spustit autoreconf
.
Systém autoconf bývá kritizován, že používá zastaralé technologie, které mají různá omezení a autorům skriptů configure.ac zbytečně komplikují i jednoduché scénáře. K často citovaným slabinám systému autoconf patří:
configure
je interpretován Bourne shellem, díky čemuž je generování Makefile
pomalé.configure
vytvořené programem autoconf
poskytují pouze ručně prováděné rozhraní příkazového řádku bez jakékoli standardizace[3]. Přestože mnoho vývojářů nerespektuje žádné konvence, tyto konvence existují a jejich používání je stále častější[4].autoconf
obsahovat nestandardní kontroly, musí se vývojáři naučit používat poměrně málo známý makroprocesor M4[3][5]Kvůli těmto omezením několik projektů, které používaly GNU Build System přešlo na jiné buildovací systémy, jako například CMake a SCons[1][7].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.