1.3. Součásti vývojového prostředí GNU
Nainstalované vývojové prostředí tvoří - s jednou vyjímkou - programy, které jsou volány z příkazové řádky. Pokud jste čekali barevná okna a animované ikony, musím vás zklamat: nejsou tu. Místo toho se autoři soustředili na rychlost, výkon a snadnější ovládání. Budete si však muset, alespoň ze začátku, zvyknout na to, že programy spouštíte nikoliv poklepáním na jejich ikonu, ale zadáním jejich jména na příkazové řádce. Není to tak složité jak to vypadá (je to jen o něco málo náročnější na vaši paměť než ikony) a výrazně to urychlí práci.
V následující tabulce jsou vyjmenovány některé programy, které jste si nainstalovali a které budete používat při psaní aplikací pro PalmOS - takový stručný přehled. Většinu jich nebudete přímo spouštět, budete však potřebovat znát jejich jména pro psaní konfiguračních souborů. Některé z nich (označené hvězdičkou v posledním sloupečku tabulky) jsou součásti vývojového prostředí Cygwin, které se chovají stejně jako příslušné programy v Unixu/Linuxu a podrobnou nápovědu k nim můžete najít v některé z příruček popisujících práci v Unixu/Linuxu. Funkci ostatních programů podrobně popíšeme v této knize v kapitole, jejíž číslo je v posledním sloupečku tabulky.
Příkaz/program | Popis | |
---|---|---|
touch soubor | Nastaví datum a čas vytvoření souboru na aktuální hodnotu systémového data a času. Pokud soubor předtím neexistoval, vytvoří se nový soubor daného jména s nulovou délkou. | * |
rm soubory... | Smaže soubory, které jsou uvedeny jako parametr programu (podobně jako příkaz DEL v MS DOSu. Je možné uvést libovolně dlouhý seznam souborů, používat zástupné znaky pro výběr skupin souborů a podobně. | * |
ln -s jméno kam | Vytvoří symbolické spojení dvou souborů: vytvoří soubor jméno a když s ním budeme ve vývojovém prostředí Cygwin pracovat, bude to jako bychom pracovali s původním souborem (adresářem) kam. | * |
ls parametry | Vypíše seznam souborů. Podobné příkazu DIR v MS DOSu, ale mnohem elegantnější. Obsahuje mnoho voleb například pro setřídění souborů, formát výstupu a podobně. | * |
echo text... | Vypíše na obrazovku text, který uvedeme jako parametr příkazu. | * |
pilot-xfer | Instaluje nebo zálohuje databáze do Palm Pilota přes sériový port. Na rozdíl od dodávaného programu HotSync umožňuje rychle instalovat jednotlivé aplikace aniž by byla synchronizována všechna ostatní data (instalace aplikací je rychlejší než pomocí programu HotSync). | 3 |
pilrc | Překladač souborů prostředků (resources) pro aplikace PalmOS. | 2 |
m68k-palmos-gcc | GNU překladač jazyka C/C++ a linker (program, který spojuje přeloženou aplikaci s knihovnami funkcí PalmOS). | 1 |
m68k-palmos-obj-res | Program, který rozloží výstupní soubor vytvořený překladačem na jednotlivé součásti aplikace pro PalmOS (které budou pak společně sbaleny v souboru s příponou *.prc). | 1 |
build-prc | Spojí jednotlivé součásti aplikace do jednoho souboru s příponou *.prc. | 1 |
m68k-palmos-gdb | Program, který ve spolupráci s emulátorem POSE nebo xcopilot slouží k nacházení chyb, které jste udělali při psaní programu. | 6 |
make cíl | Program, který slouží k řízení překladu a sjednocení funkce ostatních programů. To je také hlavní z programů uvedených v tabulce, který budete přímo spouštět zadáním jeho jména na příkazové řádce. | 1,4 |
1.4. Program make a soubor Makefile
Program make byl poprvé uveden jako součást operačního systému Unix, sloužící ke zjednodušení a zrychlení překladu složitějších programů. Tyto programy sestávaly z několika souborů zdrojového kódu, které bylo potřeba přeložit v pevném pořadí a spojit s knihovnami. Dokud se k řízení překladu používaly jednoduché dávkové soubory, tak pokud jsme změnili byť jenom jeden soubor zdrojového kódu, bylo potřeba celý projekt - všechny jeho soubory - znovu přeložit a spojit s knihovnami a to trvalo dlouho. Pak někdo prosadil následující: (1) bylo by dobré, kdyby se překládaly jen ty soubory, které se od posledního překladu změnily; (2) nechť tedy programátor vytvoří soubor, popisující závislosti jednotlivých součástí programu na sobě (hierarchii programu) a konečně (3) budiž program, který přečte tento soubor závislostí a na jeho základě určí, které soubory je zapotřebí překládat, spojovat s knihovnami, kopírovat atd. a které z nich jsou aktuální. A vznikl program make, který má všechno tohle za úkol.
make
Program make po spuštění přečte soubor Makefile, který se nachází v aktuálním adresáři a na základě pravidel v něm popsaných určí, které soubory je potřeba přeložit (nebo aktualizovat) a které programy k tomu použít.
Soubor Makefile je tvořen sadou "závislostí" a "pravidel". "Závislost" je dána cílem (souborem, který se má vytvořit) a skupinou souborů, na nichž vytvoření cílu závisí (které když se změní tak je potřeba udělat cíl nový). "Pravidla" popisují postup jak vytvořit cíl ze souborů na nichž závisí. Skupin závislost-pravidlo může být v souboru Makefile libovolné množství. Program make určuje na základě seznamu závislostí a pravidel pořadí, ve kterém mají být cíle vytvořeny a správnou posloupnost pravidel, která k tomu mají být použita. Narazí-li program make kdykoliv během provádění pravidel na chybu (tj. na program, který skončí s chybou) tak zastaví překlad.
Program make může být volán s různými parametry. Ty nejčastěji používané jsou následující:
make [-f soubor] [-n] [cíl]
cíl | Pokud uvedete jméno cíle tak bude vytvořen. Pokud jméno cíle neuvedete, bude vytvořen první z cílů, který bude v souboru Makefile uveden. |
-n | Pokud tuto volbu zadáte tak program make jen vypíše které programy a s jakými parametry by volal, aniž by to však skutečně provedl. To je užitečné, pokud máte velmi složitý soubor se závislostmi a pravidly a chcete jej vyzkoušet. |
-f soubor | Pomocí této volby sdělujete programu make, který soubor obsahující pravidla má použít. Pokud tuto volbu nezadáte, bude program make hledat soubor jménem Makefile v aktuálním adresáři. |
Makefile
Popíšeme si zjednodušenou syntaxi souboru Makefile; pro podrobnosti se podívejte do literatury o operačním systému Unix nebo popis programu make v dokumentaci libovolného překladače jazyka C/C++ (Visual, Borland, Watcom):
- Na začátku souboru Makefile mohou být definovaná makra (proměnné, které budou nahrazeny při překladu).
- Potom následují jednotlivé bloky závislost-proměnná. Tyto bloky jsou od sebe odděleny prázdnými řádky.
- V souboru Makefile mohou také být komentáře.
Makra mohou být definována na začátku souboru; každá definice musí být na samostatném řádku. Při definici uložíme do makra nějaký text a do dalších definic nebo bloků závislost-pravidlo můžeme vložit jméno makra. Jméno makra (před rovnítkem) bude při překladu nahrazeno obsahem definice (textem od rovnítka až ke konci řádku):
JMENO=cim vsim bude nahrazeno
V blocích závislost-pravidlo se na makra odvoláváme tak, že uvedeme znak dolar ('$') a jméno makra v závorkách. Tato konstrukce bude při překladu nahrazena obsahem definice. Příklad definice a použití makra:
TEXT=Ahoj vsichni echo $(TEXT) lide, $(TEXT) psi.
Tento příklad vypíše (příkaz echo) na obrazovku text "Ahoj vsichni lide, Ahoj vsichni psi." (Kurzívou je ve vypsané větě zvýrazněn obsah definice makra).
Za komentáře jsou považovány řádky začínající znakem mřížka ('#'). Text, který následuje za tímto znakem je ignorován. Často vkládají autoři do souborů Makefile komentáře jen proto, aby se v nich později vyznali. Příklad komentáře:
# Vytvoril Petr Lesny, 2000 #
Jednotlivé bloky závislosti-pravidla jsou od sebe odděleny prázdnými řádky. Syntaxe jednoho takového bloku je následující (v příkladu cíl označuje soubor, který bude vytvořen a který závisí na seznamu souborů. Pravidla jsou jednotlivé po sobě následující příkazy, které budou postupně volány k vytvoření cíle):
cíl: seznam souborů pravidlo1 pravidlo2 ...
POZOR! Všechna pravidla v souboru Makefile musí být uvedena na řádcích, které začínají tabulátorem, jinak jim program make nebude rozumět. Tato skutečnost může způsobit zdánlivě "neodstranitelné" chyby - v řadě editorů vypadá několik mezer a tabulátor úplně stejně. Pokud vám program make nebude vykonávat jednotlivá pravidla po sobě tak jak by měl, velmi pravděpodobně je vina právě v tom, že jste místo tabulátoru napsali několik mezer. ŘEŠENÍ: otevřete soubor Makefile v poznámkovém bloku (notepad) ve Windows a ujistěte se, že řá dky, na kterých jsou pravidla, začínají skutečně tabulátory.
Při psaní pravidel můžeme použít makra, která jsme si definovali na začátku souboru Makefile. Makro můžeme uvést kdekoliv - jako jméno i jako parametr příkazu, v seznamu souborů apod. Makro použijeme tak, ze napiseme znak dolar ('$') a za ním jméno makra v kulatých závorkách: $(JMENO) Příklad definice a použití makra v souboru Makefile:
Tento blok je ekvivalentní s blokem:
Všimněte si, že jméno programu i jméno ikony je použito dvakrát. Pokud bychom se v prvním případě rozhodli později, že se program bude jmenovat nedelej_nic.prc tak stačí změnit definici makra JMENO_IKONY na začátku souboru. Ve druhém případě bychom museli změnit oba dva výskyty jména aplikace, což dává větší možnost udělat chybu. Příklad komentovaného souboru Makefile si uvedeme v následujícím rámečku:
Pokud spustíme program make bez parametrů a v adresáři, do kterého jsme rozbalili soubory nic.c (zdrojový text programu), nic.rcp (soubor prostředků aplikace), soubor ikona.bmp (soubor s ikonou, na kterou se odvoláváme v souboru prostředků aplikace) a Makefile z archivu v příloze tak budou provedena pravidla v následujícím pořadí:
- pilrc nic.rcp
- touch bin.hotovo
- m68k-palmos-gcc -O2 -Wall -c nic.c -o nic.o
- m68k-palmos-gcc -O2 -Wall nic.o -o nic
- m68k-palmos-obj-res nic
- touch grc.hotovo
- build-prc nic.prc "Nic" NECO *.grc *.bin
Výsledkem bude přeložená aplikace. Pokud změníme soubor nic.c (nebo jej jen aktualizujeme příkazem touch nic.c a spustíme program make znovu, provedou se už jen následující kroky, kterými se přeloží jen tento soubor:
- m68k-palmos-gcc -O2 -Wall -c nic.c -o nic.o
- m68k-palmos-gcc -O2 -Wall nic.o -o nic
- m68k-palmos-obj-res nic
- touch grc.hotovo
- build-prc nic.prc "Nic" NECO *.grc *.bin
Podobně změníme-li jen soubor nic.rcp (nebo jej jen aktualizujeme příkazem touch nic.rcp a spustíme program make znovu, provedou se pouze následující tři kroky, kterými se začlení aktualizované prostředky aplikace (třeba nová ikona) do výsledného souboru aplikace (nic.prc):
- pilrc nic.rcp
- touch bin.hotovo
- build-prc nic.prc "Nic" NECO *.grc *.bin
Na závěr si uvedeme ještě jednu možnost programu make: pokud v souboru Makefile uvedeme na konci následující řádky s tzv. "falešným cílem":
# falešný cíl pro make - neodpovídá žádné součásti aplikace uklid: rm -f *.bin *.grc *.o nic *.hotovo
tak když napíšeme "make uklid" tak se jenom spustí program rm (viz popis programu výše v kapitole) a smaže všechny pracovní soubory, které jsme nechali v adresáři. Tímto způsobem máme připravené jednotné rozhraní k ovládání překladu našich programů pouze prostřednictvím různých cílů programu make.
Příště si povíme více o procesu překladu aplikací pro PalmOS a o různých programech, které se tohoto překladu účastní.