Hlavní navigace

GNU - pomoc při tvorbě programů: Přehled

Tomáš Kašpárek

Každý, kdo jen trochu programuje v nějakém Unixovém prostředí ví, že spravovat i sebemenší projekt dá docela práci. Proto byl vymyšlen make. Každý, kdo se stará v Unixovém prostředí o projekt používající make ví, že spravovat i sebemenší počet souborů Makefile dá docela velkou práci. Proto někdo vymyslel Autoconf.

Znáte to určitě velmi dobře. Pracujete na docela malém projektu (tedy řádově stovky až tisíce řádek) a když to po mnoha probděných nocích zprovozníte do stadia, kdy to lze ukázat i někomu jinému než sobě, tak to s povznášejícím pocitem jak jste dobří odnesete někomu ukázat. Nakopírujete a spustíte make. Jenže ouha. Zcela jistě nastane jedna ze dvou situací. Buď se to vůbec nezkompiluje, nebo se to zkompiluje ale nerozběhne. Tomuto problému se asi nikdy nebude dát úplně zabránit, ale přece jen s tím jde něco udělat.

Projekt GNU postupem času vytvořil sadu nástrojů, které mají pomoci tento problém řešit. Ono projekt GNU postupem času vytvořil (a tvoří) sadu nástrojů, které pomáhají řešit skoro všechno :-). Momentálně se tato sada skládá z následujících čás­tí:

  • Autoconf – pomáhá s přenositelností projektu mezi různými počítači (OS, HW architektura, verze knihoven a programů)
  • Automake – vytváří vstupní Makefile pro autoconf. Zajišťuje standardně používané cíle jako all, clean, install a mnohé další
  • Libtool – vrstva, která usnadňuje vytváření sdílených knihoven na různých systémech
  • Gettext – nástroj pro internacionalizaci, překlad textů v projektu do různých jazykových verzí.

Uživatelé unixových systémů jsou známi tím, že neradi opisují dokola to samé. S využitím GNU sady nástrojů si usnadníte správu projektu v následujících krocích. Místo ručního vytváření několika souborů Makefile pro různé OS, vytváříte pouze jednu sadu souborů a ty se potom automaticky převedou před kompilací na správné podklady pro make. Koncový uživatel potom nemusí zuřivě prolézat Makefile.linux a podobné a upravovat je dle svého systému.

Místo toho uživatel (tedy spíše překladatel) spustí před vlastní kompilací skript configure, který vygeneruje z připravených šablon soubory Makefile pro vlastní překlad. Takto vygenerované Makefiles jsou potom jedinečné pro konkrétní počítač, verze programů, knihoven a nastavení. Pokud chcete takto rozbalený program přenést někam jinam, musíte ho nejdříve vyčistit a potom na druhém systému znovu spustit skript configure. Nicméně většinou se přenáší zkomprimovaný balík, který jste někde získali, a ten je samozřejmě vyčištěn a ‚ready to use‘.

Pro programátora to znamená několik změn:

  • Autoconf – místo souborů Makefile je nutné vyrobit Makefile.in a v hlavním adresáři projektu také soubor configure.in. Makefile.in je šablona pro vygenerování koncového Makefile a configure.in je šablona pro vygenerování skriptu configure. Makefile.in tedy obsahuje informace o tom, co se bude generovat, zatímco configure.in říká jak se to bude dělat. Obvyklé odlišnosti jsou třeba v potřebných knihovnách a jejich umístění, v umístění hlavičkových souborů, vlastnostech překladače, definici datových typů a další radosti.
  • Automake – aby programátor nemusel vytvářet soubory Makefile.in, může použít tento nástroj. Rozdíl je v tom, že při použití automake vytváří místo Makefile.in soubor Makefile.am. Ten obsahuje pouze nejnutnější informace a pomocí automake se z něj vygeneruje Makefile.in.
  • Config.h.in – často používaný soubor generovaný pomocí autoconfu. Po proběhnutí skriptu configure vznikne config.h (název se může lišit), který lze vložit do zdrojových souborů a podle voleb v něm řídit překlad projektu. Typické použití je:

    detekce_funkce_v_kni­hovně (pomocí maker autoconfu)
    → #define HAVE_FUNCTION_XXX (v config.h)
    → použití ve zdrojovém kódu

    #ifdef HAVE_FUNCTION_XXX
    func_XXX()
    #endif

Nástroj gettext slouží pro vytváření jazykových verzí vašeho projektu. Pomocí připravených programů se ze zdrojových souborů vygeneruje seznam řetězců pro překlad a vám potom už jen zbývá vzít slovník a vytvořit verze vašeho programu v japonštině, ruštině a dalších jazycích. Přitom požadavky na vlastní zdrojové texty jsou celkem minimální. Na začátku programu zavoláte pár funkcí, vložíte nějaký ten hlavičkový soubor a místo „řetězce pro překlad“ použijete něco jako _(„řetězec pro překlad“).

Za tímto zápisem se skrývá makro, které místo zadaného řetězce podšoupne jeho jazykovou mutaci. Jazyk se samozřejmě řídí nastavením proměnných prostředí pro locales – konkrétně LC_ALL. Binární soubory vzniklé z jazykových překladů se potom instalují spolu s programem do adresáře /usr/share/lo­cale/$LANG/LC_MES­SAGES jako nazev_programu.mo. Adresář se může dle distribuce a verze OS lišit – např. /usr/local/share… a jiné. Pokud neexistuje příslušné jazykové verze, použijí se základní řetězce umístěné ve zdrojových souborech. V balíku gettext je také sada programů, které slouží pro správu, údržbu a aktualizaci souborů s překlady.

Na konec (tedy spíše pro začátek) ještě příslušné odkazy:

Příště se na některé GNU nástroje podíváme podrobněji.

Našli jste v článku chybu?

5. 2. 2001 21:16

Jaromir Dolecek (neregistrovaný)

Operujete s tim, ze pokud nekoho k necemu neprinutite (v tomto pripade k vydani kodu), tak to neudela. Tak to ale nefunguje. Sdilet zdrojovy kod je proste z vice duvodu vyhodne i kdyz k tomu nic cloveka nenuti. Ja osobne mnohem radsi delam veci dobrovolne.

1. 2. 2001 19:33

Mikulas Patocka (neregistrovaný)

No jo, ale problem je v tom, ze program pouzivajici BSD make nepujde prelozit jinde, nez na BSD. Takze clovek pak stejne bude muset psat tech Makefilu nekolik - pro kazdy klon Unixu - a udrzba programu bude mnohem komplikovanejsi.


Programy pouzivajici automake/autoconf jdou prelozit na vsech Unixech (a nejen na nich - i na OS/2 nebo Win32). Udajne configure script chodi i na historickem Unixu v7 na PDP11.




Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí