Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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.

Školení: Linux – Firewall, Samba, VPN

Na třídenním školení se naučíte nainstalovat a spravovat Firewall a Router, SAMBA Doménový a Souborový server. Dále si zprovozníte vlastní, zabezpečený VPN server.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,90

Přehled názorů

gettext
Petr Mach 30. 1. 2001 00:50
Nový
└ 
Re: gettext
Michal Krause 30. 1. 2001 12:28
Nový
 
└ 
Re: gettext
Mikulas Patocka 30. 1. 2001 19:46
Nový
Dalsi dokumentace v cestine
Jirka 30. 1. 2001 08:13
Nový
config.h.in, licence
Tomas Zellerin 30. 1. 2001 08:53
Nový
└ 
Re: config.h.in, licence
Jaromir Dolecek 30. 1. 2001 23:25
Nový
 
└ 
Re: config.h.in, licence
Jaromir Dolecek 30. 1. 2001 23:37
Nový
Aha
Miloslav Ponkrác 30. 1. 2001 12:30
Nový
├ 
Re: Aha
Jan Dvorak 30. 1. 2001 19:51
Nový
│
├ 
Re: Aha
Jaromir Dolecek 30. 1. 2001 23:34
Nový
│
├ 
Re: Aha
Jaromir Dolecek 30. 1. 2001 23:49
Nový
│
└ 
Re: Aha
Miloslav Ponkrác 31. 1. 2001 02:17
Nový
└ 
Re: Aha
Jaromir Dolecek 30. 1. 2001 23:28
Nový
Doplneni
Jan Dvorak 30. 1. 2001 19:58
Nový
BSD make(1) system je mnohem sofistikovanejsi
Jaromir Dolecek 30. 1. 2001 23:20
Nový
└ 
Re: BSD make(1) system je mnohem sofistikovanejsi
Mikulas Patocka 1. 2. 2001 19:33
Nový
K slibenemu pokracovani
Petr Mach 31. 1. 2001 00:27
Nový
GNU
Izak 31. 1. 2001 14:37
Nový
├ 
Re: GNU
Beda Kosata 31. 1. 2001 17:49
Nový
│
├ 
Re: GNU
Petr Mach 31. 1. 2001 23:05
Nový
│
│
└ 
Re: GNU
Beda Kosata 1. 2. 2001 08:31
Nový
│
└ 
Re: GNU
Jaromir Dolecek 5. 2. 2001 21:16
Nový
└ 
Re: GNU
Tomas Zellerin 1. 2. 2001 08:39
Nový
jak v podadresarich?
Radim 31. 1. 2001 17:38
Nový
└ 
Re: jak v podadresarich?
Tomas Zellerin 1. 2. 2001 08:25
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem