GNU/Linux >> Znalost Linux >  >> Linux

Úvod do GNU Autotools

Stáhli jste si někdy zdrojový kód oblíbeného softwarového projektu, který vyžadoval zadání téměř rituálního ./configure; provést &&provést instalaci sekvence příkazů k sestavení a instalaci? Pokud ano, použili jste GNU Autotools. Pokud jste se někdy podívali do některých souborů doprovázejících takový projekt, pravděpodobně vás také děsila zjevná složitost takového systému sestavování.

Dobré zprávy! Nastavení GNU Autotools je mnohem jednodušší, než si myslíte, a je to samotný GNU Autotools, který za vás generuje tyto 1000řádkové konfigurační soubory. Ano, můžete napsat 20 nebo 30 řádků instalačního kódu a dalších 4 000 získáte zdarma.

Autotools v práci

Linuxový terminál

  • 7 nejlepších emulátorů terminálu pro Linux
  • 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
  • Stáhnout nyní:SSH cheat sheet
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Výukové programy příkazového řádku systému Linux

Pokud jste novým uživatelem Linuxu a hledáte informace o tom, jak instalovat aplikace, nemusíte číst tento článek! Pokud chcete zjistit, jak se vytváří software, můžete si jej přečíst, ale pokud právě instalujete novou aplikaci, přečtěte si můj článek o instalaci aplikací v systému Linux.

Pro vývojáře je Autotools rychlý a snadný způsob, jak spravovat a balit zdrojový kód, aby uživatelé mohli kompilovat a instalovat software. Autotools je také dobře podporováno hlavními formáty balení, jako je DEB a RPM, takže správci softwarových úložišť mohou snadno připravit projekt vytvořený pomocí Autotools.

Autotools funguje ve fázích:

  1. Nejprve během ./configure V kroku Autotools prohledá hostitelský systém (počítač, na kterém běží), aby zjistil výchozí nastavení. Výchozí nastavení zahrnuje umístění podpůrných knihoven a umístění nového softwaru v systému.
  2. Dále během vytváření V kroku Autotools vytvoří aplikaci, obvykle převodem pro člověka čitelného zdrojového kódu do strojového jazyka.
  3. Nakonec během provedení instalace V kroku Autotools zkopíruje soubory, které vytvořila, do příslušných umístění (jak bylo zjištěno během fáze konfigurace) ve vašem počítači.

Tento proces se zdá jednoduchý a je, pokud používáte Autotools.

Výhoda Autotools

GNU Autotools je velký a důležitý software, který většina z nás považuje za samozřejmost. Spolu s GCC (GNU Compiler Collection) je Autotools lešení, které umožňuje konstruovat a instalovat svobodný software do běžícího systému. Pokud používáte systém POSIX, není podceněním říci, že většina vašeho operačního systému existuje na vašem počítači jako spustitelný software kvůli těmto projektům.

V pravděpodobném případě, že váš projekt pro domácí mazlíčky není operační systém, můžete předpokládat, že Autotools je pro vaše potřeby přehnané. Ale navzdory své pověsti má Autotools spoustu malých funkcí, které vám mohou pomoci, i když je váš projekt relativně jednoduchá aplikace nebo série skriptů.

Přenositelnost

Za prvé, Autotools přichází s ohledem na přenositelnost. I když nemůže zajistit, aby váš projekt fungoval na všech platformách POSIX (je to na vás, jakožto kodéru), Autotools dokáže zajistit, že soubory, které jste označili pro instalaci, se nainstalují do nejrozumnějších míst na známé platformě. A kvůli Autotools je pro zkušeného uživatele triviální přizpůsobit a přepsat jakoukoli neoptimální hodnotu podle svého vlastního systému.

S Autotools stačí vědět, jaké soubory je třeba nainstalovat do jakého obecného umístění. O vše ostatní se postará. Už žádné vlastní instalační skripty, které se přeruší na jakémkoli netestovaném OS.

Balení

Autotools je také dobře podporován. Předejte projekt s Autotools distro balírně, ať už balí RPM, DEB, TGZ nebo cokoli jiného, ​​a jejich práce je jednoduchá. Balicí nástroje znají Autotools, takže pravděpodobně nebudou nutné žádné opravy, hackování nebo úpravy. V mnoha případech lze začlenění projektu Autotools do potrubí dokonce automatizovat.

Jak používat Autotools

Chcete-li používat Autotools, musíte mít nejprve nainstalované Autotools. Vaše distribuce může poskytovat jeden balíček, který má vývojářům pomoci při vytváření projektů, nebo může poskytovat samostatné balíčky pro každou komponentu, takže možná budete muset provést průzkum na vaší platformě, abyste zjistili, jaké balíčky potřebujete nainstalovat.

Primární součásti Autotools jsou:

  • automobil
  • autoconf
  • vyrobit

I když pravděpodobně budete muset nainstalovat kompilátor (například GCC), který váš projekt vyžaduje, Autotools funguje dobře se skripty nebo binárními aktivy, které není nutné kompilovat. Ve skutečnosti mohou být Autotools pro takové projekty užitečné, protože umožňují provést odinstalaci skript pro snadné odstranění.

Jakmile budete mít nainstalované všechny komponenty, je čas podívat se na strukturu souborů vašeho projektu.

Struktura projektu Autotools

GNU Autotools má velmi specifická očekávání a většina z nich je pravděpodobně známá, pokud často stahujete a vytváříte zdrojový kód. Zaprvé se očekává, že samotný zdrojový kód bude v podadresáři src .

Váš projekt nemusí splňovat všechna tato očekávání, ale pokud umístíte soubory do nestandardních umístění (z pohledu Autotools), budete to muset později ve svém Makefile upravit.

Kromě toho jsou vyžadovány tyto soubory:

  • NOVINKY
  • README
  • AUTOŘI
  • Protokol změn

Soubory nemusíte aktivně používat a mohou to být symbolické odkazy na monolitický dokument (např. README.md ), který zahrnuje všechny tyto informace, ale musí být přítomny.

Konfigurace Autotools

Vytvořte soubor s názvem configure.ac v kořenovém adresáři vašeho projektu. Tento soubor používá autoconf vytvořte konfiguraci shell skript, který uživatelé spouštějí před vytvořením. Soubor musí obsahovat alespoň AC_INIT a AC_OUTPUT Makra M4. K použití těchto maker nepotřebujete vědět nic o jazyce M4; jsou již pro vás napsány a všechny relevantní pro Autotools jsou definovány v dokumentaci.

Otevřete soubor ve svém oblíbeném textovém editoru. AC_INIT makro se může skládat z názvu balíčku, verze, e-mailové adresy pro hlášení chyb, adresy URL projektu a volitelně názvu zdrojového souboru TAR.

AC_OUTPUT makro je mnohem jednodušší a nepřijímá žádné argumenty.

AC_INIT([tučňák], [2019.3.6], [[email protected]])
AC_OUTPUT

Pokud byste spustili autoconf v tomto okamžiku konfigurace skript bude vygenerován z vašeho configure.ac soubor a bude úspěšně spuštěn. To by však bylo vše, protože vše, co jste dosud udělali, je definovat metadata vašeho projektu a požádat o vytvoření konfiguračního skriptu.

Další makra musíte vyvolat v souboru configure.ac file jsou funkce pro vytvoření Makefile. Makefile říká make příkaz co dělat (obvykle jak zkompilovat a propojit program).

Makra pro vytvoření souboru Makefile jsou AM_INIT_AUTOMAKE , který nepřijímá žádné argumenty, a AC_CONFIG_FILES , který přijímá jméno, které chcete nazývat výstupní soubor.

Nakonec musíte přidat makro, které bude odpovídat kompilátoru, který váš projekt potřebuje. Makro, které použijete, samozřejmě závisí na vašem projektu. Pokud je váš projekt napsán v C++, je vhodné makro AC_PROG_CXX , zatímco projekt napsaný v C vyžaduje AC_PROG_CC , a tak dále, jak je podrobně popsáno v části Vytváření programů a knihoven v dokumentaci Autoconf.

Například bych pro svůj program v C++ mohl přidat následující:

AC_INIT([tučňák], [2019.3.6], [[email protected]])
AC_OUTPUT
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
AC_PROG_CXX

Uložte soubor. Je čas přejít na Makefile.

Vygenerování souboru Makefile Autotools

Makefiles není těžké zapsat ručně, ale Autotools může jeden napsat za vás a ten, který vygeneruje, použije možnosti konfigurace zjištěné během ./configure krok a bude obsahovat mnohem více možností, než byste si mysleli zahrnout nebo chcete sami napsat. Autotools však nedokáže zjistit vše, co váš projekt vyžaduje k sestavení, takže musíte přidat některé podrobnosti do souboru Makefile.am , který zase používá automake při vytváření souboru Makefile.

Makefile.am používá stejnou syntaxi jako Makefile, takže pokud jste někdy psali Makefile od začátku, pak vám tento proces bude známý a jednoduchý. Často Makefile.am soubor potřebuje pouze několik definic proměnných k označení toho, jaké soubory mají být sestaveny a kam se mají nainstalovat.

Proměnné končící na _PROGRAMS identifikovat kód, který má být sestaven (toto je obvykle považováno za primární cílová; je to hlavní důvod, proč Makefile existuje). Automake rozpoznává další primární položky, například _SCRIPTS , _DATA , _LIBRARIES a další společné části, které tvoří softwarový projekt.

Pokud je vaše aplikace doslova zkompilována během procesu sestavování, identifikujete ji jako binární program pomocí bin_PROGRAMS proměnnou a poté odkazujte na jakoukoli část zdrojového kódu potřebnou k sestavení (těmito částmi může být jeden nebo více souborů, které je třeba zkompilovat a propojit) pomocí názvu programu jako předpony proměnné:

bin_PROGRAMS =tučňák
penguin_SOURCES =tučňák.cpp

Cíl bin_PROGRAMS je nainstalován do bindir , který je uživatelsky konfigurovatelný během kompilace.

Pokud vaše aplikace není ve skutečnosti zkompilovaná, pak váš projekt nepotřebuje bin_PROGRAMS variabilní vůbec. Pokud je například vaším projektem skript napsaný v jazyce Bash, Perl nebo podobném interpretovaném jazyce, definujte _SCRIPTS místo toho proměnná:

bin_SCRIPTS =bin/tučňák

Automake očekává, že zdroje budou umístěny v adresáři s názvem src , takže pokud váš projekt používá pro své rozvržení alternativní adresářovou strukturu, musíte společnosti Automake říci, aby přijímala kód z vnějších zdrojů:

AUTOMAKE_OPTIONS =cizí objekty subdir-objects

Nakonec můžete vytvořit jakákoli vlastní pravidla Makefile v Makefile.am a budou doslovně zkopírovány do vygenerovaného souboru Makefile. Pokud například víte, že před pokračováním instalace je třeba ve zdrojovém kódu nahradit dočasnou hodnotu, můžete pro tento proces vytvořit vlastní pravidlo:

all-am:penguin
        dotkněte se bin/penguin.sh
       
tučňák:bin/penguin.sh
        @sed "s|__datadir__|@datadir@|" $<>bin/$@

Zvláště užitečným trikem je rozšířit stávající čisté cíl, alespoň během vývoje. Vyčištění příkaz obecně odstraní všechny vygenerované soubory sestavení s výjimkou infrastruktury Automake. Je navržen tak, protože většina uživatelů jen zřídka chce uklízet vymazat soubory, které usnadňují vytváření jejich kódu.

Během vývoje však možná budete chtít metodu, která spolehlivě vrátí váš projekt do stavu relativně neovlivněného Autotools. V takovém případě možná budete chtít přidat toto:

clean-local:
        @rm config.status configure config.log
        @rm Makefile
        @rm -r autom4te.cache/
        @rm aclocal.m4
        @rm kompilace install-sh chybí soubor Makefile.in

Je zde velká flexibilita, a pokud ještě neznáte Makefiles, může být obtížné zjistit, jaký je váš Makefile.am potřeby. Naprostou nutností je primární cíl, ať už se jedná o binární program nebo skript, a údaj o tom, kde se nachází zdrojový kód (ať už prostřednictvím _SOURCES proměnnou nebo pomocí AUTOMAKE_OPTIONS říct Automake, kde má hledat zdrojový kód).

Jakmile budete mít tyto proměnné a nastavení definovány, můžete zkusit vygenerovat skripty sestavení, jak vidíte v další části, a upravit je podle všeho, co chybí.

Generování skriptů sestavení Autotools

Vybudovali jste infrastrukturu, nyní je čas nechat Autotools dělat to, co umí nejlépe:automatizovat vaše projektové nástroje. Způsob, jakým vývojář (vy) pracuje s Autotools, se liší od způsobu, jakým uživatelé vytvářejí váš kód.

Tvůrci obecně používají tuto známou sekvenci:

$ ./configure
$ make
$ sudo make install

Aby však toto zaklínadlo fungovalo, musíte jako vývojář zavést infrastrukturu sestavení. Nejprve spusťte autoreconf k vygenerování konfiguračního skriptu, který uživatelé vyvolávají před spuštěním make . Použijte –install možnost přinést pomocné soubory, jako je symbolický odkaz na depcomp , skript pro generování závislostí během procesu kompilace a kopii kompilace skript, obal pro kompilátory pro zohlednění odchylek v syntaxi a tak dále.

$ autoreconf --install
configure.ac:3:instalace './compile'
configure.ac:2:instalace './install-sh'
configure.ac:2:instalace './missing'

S tímto vývojovým sestavením prostředí pak můžete vytvořit balíček pro distribuci zdrojového kódu:

$ make dist

vzdálenost target je pravidlo, které získáte „zdarma“ od Autotools.

Je to funkce, která je zabudována do souboru Makefile vygenerovaného z vašeho skromného Makefile.am konfigurace. Tento cíl vytvoří tar.gz archiv obsahující veškerý váš zdrojový kód a veškerou základní infrastrukturu Autotools, aby si lidé, kteří si stahují balíček, mohli vytvořit projekt.

V tomto okamžiku byste měli pečlivě zkontrolovat obsah archivu, abyste se ujistili, že obsahuje vše, co zamýšlíte odeslat svým uživatelům. Měli byste si z něj také samozřejmě zkusit stavět sami:

$ tar --extract --file penguin-0.0.1.tar.gz
$ cd penguin-0.0.1
$ ./configure
$ make
$ DESTDIR=/tmp/penguin-test-build make install

Pokud je vaše sestavení úspěšné, najdete místní kopii zkompilované aplikace určenou DESTDIR (v případě tohoto příkladu /tmp/penguin-test-build ).

$ /tmp/example-test-build/usr/local/bin/example 
ahoj světe od GNU Autotools

Čas použít Autotools

Autotools je skvělá sbírka skriptů pro předvídatelný a automatizovaný proces uvolňování. Tato sada nástrojů pro vás může být nová, pokud jste zvyklí na Python nebo Bash buildery, ale pravděpodobně stojí za to se naučit pro strukturu a přizpůsobivost, kterou poskytuje vašemu projektu.

A Autotools také není jen pro kód. Autotools lze použít k vytváření projektů Docbook, k udržení organizace médií (používám Autotools pro svá hudební vydání), dokumentačních projektů a čehokoli dalšího, co by mohlo těžit z přizpůsobitelných cílů instalace.


Linux
  1. Programovací jazyk C - Úvod

  2. Úvod do editoru vi

  3. Úvod do příkazu diff

  1. Úvod do Docker Images

  2. Úvod do Dockeru

  3. Úvod do iptables

  1. Úvod do Dockeru

  2. Plesk:Úvod

  3. Úvod do GIT v Linuxu – instalace, vytvoření projektu, odevzdání souborů