Jan Vlášek: MAKE
Predchozi (Obsah) Dalsi

6. Práce s rozsáhlými projekty

Již víme, že pro překlad rozsáhlých či rozsáhlejších projektů se dá velice dobře využít právě program make. Ten po spuštění hledá v aktuálním adresáři soubor makefile nebo Makefile (v tomto pořadí), ve kterém jsou zapsána pravidla pro překlad projektu (1) .

Také již víme, že jednotlivá pravidla v makefile říkají, kdy a jak znovu vytvořit soubor, který je cílem daného pravidla. Uveďme jednoduchý příklad, kde cílem je soubor prog, který je závislý na souborech, ze kterých vzniká překladem.

# Makefile pro vytvoření prog z a.c a b.c
prog: a.c b.c defs.h
cc -o prog a.c b.c

Spuštěním programu make bez parametrů lze provést zpracování souboru Makefile:

$ make
cc -o prog a.c b.c

Další spuštění programu make provede překlad pouze tehdy, byl-li některý ze zdrojových textů modifikován.

$ make
make: 'prog' is up to date.

Překlad rozsáhlejších programů je vhodné rozdělit - nejdříve překladem zdrojových textů vytvoříme objektové soubory, ze kterých pak v samostatném kroku sestavíme spustitelný program. Výše uvedený příklad bude tedy vypadat následovně:

prog: a.o b.o
cc -o prog a.o b.o
a.o: a.c defs.h
cc -c a.c
b.o: b.c defs.h
cc -c b.c

Po spuštění make nalezne první pravidlo, před jeho zpracováním však musí nalézt a zpracovat všechna pravidla na kterých závisí. V tomto případě bude nejprve znovu přeložen změněný zdrojový text. Výsledný objektový soubor pak bude sestaven spolu s objektovým souborem uchovaným z předchozího překladu ve spustitelný program.

Po změně souboru a.c program make spustí pouze dva příkazy:

$ make
cc -c a.c
cc -o prog a.o b.o

Pokud požadujeme vytvoření pouze některého cíle, můžeme tento cíl zadat jako argument příkazu make:

$ make b.o
cc -c b.c

Seznam závislostí v pravidle může být i prázdný. Toho se někdy využívá pro definici cílů, které nejsou soubory. Následující cíl definuje vymazání všech objektových souborů v aktuálním adresáři.

clean:
rm *.o

Toto pravidlo můžeme vložit do předchozího Makefile a spustit jako: $ make clean
rm *.o

A jelikož program make obsahuje množinu interních pravidel pro překlad nejčastějších druhů souborů, může být předchozí příklad za pomoci těchto pravidel zapsán stručněji:

prog: a.o b.o
cc -o prog a.o b.o
a.o: a.c defs.h
b.o: b.c defs.h

Poznámka:
Pokud cíl uvedeme na příkazovém řádku a je možné ho vytvořit podle některého předdefinovaného pravidla, nemusí být v Makefile tento cíl uveden.

Setkáte-li se se soubory makefile při instalaci programů získaných po síti, stačí si většinou pozorně prohlédnout definice maker na jeho začátku. Zde je možné předefinovat např. adresáře, typ překladače, atd. Do dalšího obsahu souboru již není nutné dále zasahovat.



Predchozi
Converted by Selathco 0.85 on 15.06.1999 11:08
Dalsi