Autoconf

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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.

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ř. +more 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. +more Autoconf spolu s programy Automake a Libtool tvoří GNU Build System, který zahrnuje několik dalších nástrojů, především Autoheader.

Účel programu autoconf

Způsob použití nástrojů autoconf a automake. +more Ve starších verzích autoconf se soubor "configure. ac" jmenoval "configure. in". 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

Historie

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.

Filozofie

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. +more9 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í. +more 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:.

* skript configure je použitelný i na novějších nebo neznámých systémech * na systémech, na kterých správce nainstaloval vylepšené verze vývojových nástrojů, umožňuje využívat jejich možností * nevyžaduje udržování detailních seznamů, které verze obsahují podporu jakých vlastností

Příkaz configure

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

"wikitableCCpříkaz volající překladač jazyka C
CFLAGSpříznaky (řádkové parametry) pro překladač jazyka C
LDFLAGSpříznaky (řádkové parametry) pro linker (např. -Ladresář, pokud se má program linkovat s knihovnami umístěnými v nestandardním adresáři)
CPPFLAGSpříznaky (řádkové parametry) pro preprocesor jazyka C (např. +more -Iadresář, pokud program používá hlavičkové soubory umístěné v nestandardním adresáři)
CPPpří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.

Příklad použití autoconf

Program "Hello, world":

Vytvořit zdrojový text hello.c:

#include

int main { printf("Hello, world!\n"); return 0; }

Vytvořit Makefile. am obsahující řádek bin_PROGRAMS se jmény všech binárních programů v projektu oddělená mezerami. +more 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

Pustit 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

Přejmenujeme configure.scan na configure.ac a doplníme informace do řádku AC_INIT

Pustíme 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

Do configure.ac přidáme za řádek AC_INIT řádek

AM_INIT_AUTOMAKE

Pustíme aclocal; vytvoří aclocal.m4 a v adresáři autom4te.cache soubory traces.1 a output.1 a aktualizuje requests

Spustíme automake --add-missing --copy; vypíše

configure. ac: installing `. +more/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.

Spustit autoconf; aktualizuje soubor requests a vytvoří skript configure.

Použít postup jako při instalaci balíčku:

$ ./configure $ make $ /bin/su - $ make install

Po úpravě zdrojových textů znovu pustit autoscan; porovnat configure.scan s configure.ac, aktualizovat configure.ac a spustit autoreconf.

Kritika

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. +more K často citovaným slabinám systému autoconf patří:.

* Složitost používání systému, kdy u většiny projektů je potřeba vícenásobné opakování. * Vygenerovaný skript configure je interpretován Bourne shellem, díky čemuž je generování Makefile pomalé. +more * Někteří lidé se domnívají, že skripty configure vytvořené programem autoconf poskytují pouze ručně prováděné rozhraní příkazového řádku bez jakékoli standardizace. Přestože mnoho vývojářů nerespektuje žádné konvence, tyto konvence existují a jejich používání je stále častější. * Pokud má autoconf obsahovat nestandardní kontroly, musí se vývojáři naučit používat poměrně málo známý makroprocesor M4 * Kvůli slabé zpětné i dopředné kompatibilitě je nutné používat wrapper skript. * Skripty generované příkazem autoconf jsou obvykle rozsáhlé a dosti složité. I když produkují obsáhlé ladicí výstupy, jejich ladění může být obtížné.

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.

Odkazy

Reference

Literatura

Související články

Configure * Svatá trojkombinace - instalace softwaru ze zdrojových textů z pohledu běžného uživatele * CMake - Alternativní systém pro překlad softwarových balíčků * GNU build system * pkg-config - Detekce závislostí mezi balíčky

Externí odkazy

[url=https://www. gnu. +moreorg/software/autoconf/]Oficiální web systému autoconf[/url] * [url=https://www. gnu. org/software/ac-archive/]GNU Autoconf macro archive[/url] * [url=http://sources. redhat. com/autobook/]The Goat Book homepage (aka the Autobook)[/url] * [url=https://web. archive. org/web/20041013190022/http://www. openismus. com/documents/linux/automake/automake. shtml]Using Automake and Autoconf with C++[/url] * [url=https://web. archive. org/web/20060413182543/http://www. openismus. com/documents/linux/using_libraries/using_libraries. shtml]Using C/C++ libraries with Automake and Autoconf[/url]. * [url=http://autotoolset. sourceforge. net/]Autotoolset home page[/url] * [url=https://web. archive. org/web/20140816060326/http://www. freesoftwaremagazine. com/books/autotools_a_guide_to_autoconf_automake_libtool]Autotools: A practitioner's guide to Autoconf, Automake and Libtool[/url] * [url=https://autotools. io/]Autotools Mythbuster[/url].

Kategorie:Automatizace sestavování softwaru Kategorie:Programovací software Kategorie:Konfigurace softwaru

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top