Úvod do Autotools
V této kapitole se vám pokusím představit Autotools, aneb GNU build System. Povím vám, z čeho se skládá a k čemu se vám a uživatelům vašich projektů může hodit.
Co a k čemu je Autotools
Autotools je sada nástrojů, která vám může pomoci s vytvářením konfiguračního
skriptu (configure
) a makefile souborů. Skládá se z několika programů.
Konfigurace pro autotools se zapisuje v makrech jazyka m4.
Prozatím jste se zabývali především tím, jak napsat zdrojové kódy a jak je přeložit. V kapitole o Makefile jste se naučili pracovat s programem make, který vám (a všem, co váš výtvor chtějí přeložit) ulehčuje práci s překladem.
Součástí autotools je automake, který vám pomůže vygenerovat
Makefile soubor(y) na základě vašich zdrojových souborů (a trochy konfigurace).
A to nejen ledajaké Makefile, ale Makefile, které splňují
GNU standard. Takový Makefile neobsahuje jen cíl pro přeložení a sestavení
programu, ale i pro jeho instalaci a odinstalaci, nebo cíl pro vytvoření zagzipovaného
balíčku vhodného pro distribuci. Dokáže i zkontrolovat, zda balíček obsahuje
vše potřebné pro instalaci na cizým systému. A když to teď hodně zjednoduším,
tak jediné, co k tomu všemu potřebuje, je název výsledného programu a seznam
zdrojových souborů.
Pokud jste někdy instalovali program nebo knihovnu ze zdrojových souborů, nejspíše
jste k tomu použili tzv. „svatou trojici“,
tedy příkazy ./configure && make && make install
.
Autotools vám pomůže vytvořit standardní configure
skript, který obsahuje
všechny volby požadované GNU standardem. Tento skript se v první řadě stará o
prozkoumání systému, na kterém je spušťěn. Zjištuje, zda existují všechny potřebné
hlavičkové soubory, knihovny a programy nutné pro překlad vašeho díla. Když je potřeba,
dokáže vygenerovat hlavičkový soubor, který definuje různé makra podle toho, co o
systému zjistil. Společně s automake vygeneruje příslušné Makefile soubory a dá
uživateli možnost změnit cílové adresáře pro instalaci programu, jeho dat, případně
hlavičkových souborů, pokud je instaluje se sdílenou knihovnu.
A toto všechno navíc dokáže udělat správně na různých operačních systémech.
Je napsán tak, aby configure
skript fungoval ve všech možných
Linuxech/Unixech/BSD/OS-Xech, se kterými se autoři kdy setkali.
Hlavním cílem při použití autotools ale není ulehčit život vám, vývojářům, ale uživatelům vašich programů. Myslete prosím na to. Naučit se používat autotools není úplně triviální (tedy nebylo, dokud nevznikl tento kurz :-). Použití autotools může znamenat určité změny ve vašich zdrojových kódech, v organizaci souborů atp. Je to nutná daň za vše to dobré, co autotools přináší.
Použití autotools k vytvoření configure
skriptu je také první krok
k vytvoření binárního balíčku pro libovolnou linuxovou/unixovou distribuci.
S flexibilitou přichází komplexita.
Autotools je velice flexibilní. Jeho návrh je v podstatě velmi jednoduchý. Umožňuje vám dosáhnout téměř čehokoliv a to mnoha způsoby. To ale také znamená, že je GNU Build systém „velká bestie“. Nedá se proto jednoduše vysvětlit v jedné kapitole a dokumentace k autotools je velká. Dokumentace je super, pokud hledáte něco konkrétního, ale už ne tak super, abyste se z ní o autools učili. V této a v dalších kapitolách se vám pokusím předložit to nejdůležitější co o autoools musíte vědět, abyste jej mohli začít používat. Zbytek se už doučíte za pochodu.
CMAKE a další konkurence
Autotools je na Linuxu de facto standardní build systém. Existuje ale i konkurence. Jednou z nich je CMAKE.
CMAKE funguje na trochu jiném, jednodušším principu. Vstupem je jeden konfigurační soubor. Výstupem je projekt pro vybrané prostředí. V Linuxu to mohou být Makefile, ve Windows např. projekt pro Visual Studio, Code::Blocks či cokoliv co si vyberete (a co CMAKE podporuje).
I autotools můžete používat na Windows, ale v takovém případě musíte nainstalovat nějaké linux-like prostředí, abyste měli k dispozici bash, make a další nástroje, které autotools vyžaduje. To je trochu jako dbrat se levou rukou za pravým uchem. Zatímco pro Linux/Unix není lepší volba než autotools, pro Windows je určitě lepší CMAKE.
Pokud chcete, aby váš projekt fungoval jak v Linxu, tak ve Windows, ideální je použít pro Unix-like OS autotools a pro windows CMAKE. To je ale 2x více práce. S použitím CMAKE v Linuxu problém není, takže když použijete jen CMAKE, ušetříte si práci s autotools a nic moc tím asi nezkazíte.
96% lidí stále používá Windows oproti Linuxu. Takže 96% lidí vám bude doporučovat CMAKE. Já ale patřím k té 4% Linuxové menšině, která vám bude doporučovat autotools. Jste-li také linuxáci (nebo chcete být), využijete bohatě své znalosti bashe a získáte nástroj, ve kterém dokážete udělat cokoliv. Navíc použijete něco, co většina Linuxových uživatelů očekává (ne každý zná, umí použít a má nainstalovaný program cmake …).
Krom autotools a CMAKE exitují ještě další nástroje pro zjednodušení překladu a instalace, jako například qmake nebo scons. Na internetu určitě najdete spousty flamewars o tom, který je lepší (a na co). Můj názor se dá shrnout takto: Programujete pro Linux/Unix? → autotools. Programujete pro Windows? → vystačíte si s projektem ve Visual Studiu :-), nebo použijte CMAKE.