Řízení překladu (make a soubor Makefile): Porovnání verzí
m (→Automatický překlad: typo) |
(→Automatický překlad: více pravidel) |
||
Řádka 31: | Řádka 31: | ||
Zavoláme-li příkaz ''make'' (bez parametru), dojde k přeložení programu podle implicitního pravidla (zde prvního uvedeného, tj. podle pravidla ''ahoj''). Zavoláme-li jej znovu, oznámí nám, že překlad není nutný. Důvodem je fakt, že soubor ''ahoj.c'' je staší, než soubor ''ahoj'' (zdrojový text je starší, než přeložený program). Budeme-li editovat soubor ''ahoj.c'', bude čas jeho poslední změny novější, než čas poslední změny přeloženého programu (soubor ''ahoj''). Proto bude po zavolání příkazu ''make'' opět provedena kompilace. Aby nebylo nutné editorem soubor otevřít, provést změnu a výsledek uložit, lze využít příkaz <code>touch ahoj.c</code>, který změní čas poslední modifikace souboru. | Zavoláme-li příkaz ''make'' (bez parametru), dojde k přeložení programu podle implicitního pravidla (zde prvního uvedeného, tj. podle pravidla ''ahoj''). Zavoláme-li jej znovu, oznámí nám, že překlad není nutný. Důvodem je fakt, že soubor ''ahoj.c'' je staší, než soubor ''ahoj'' (zdrojový text je starší, než přeložený program). Budeme-li editovat soubor ''ahoj.c'', bude čas jeho poslední změny novější, než čas poslední změny přeloženého programu (soubor ''ahoj''). Proto bude po zavolání příkazu ''make'' opět provedena kompilace. Aby nebylo nutné editorem soubor otevřít, provést změnu a výsledek uložit, lze využít příkaz <code>touch ahoj.c</code>, který změní čas poslední modifikace souboru. | ||
+ | |||
+ | === Další cíle příkazu make === | ||
+ | Cíle jsou v souboru <code>Makefile</code> pravidla (návěští), která lze provést tak, že jejich název přidáme jako parametr příkazu <code>make</code>. Následující soubor <code>Makefile</code> definuje pravidla ''help'' a ''clean'': | ||
+ | |||
+ | help: | ||
+ | @echo "Program $(NAZEV) verze $(VERZE)" | ||
+ | @echo "Pouziti: make prikaz" | ||
+ | @echo "prikaz: help - napoveda" | ||
+ | @echo " ahoj - prelozit program" | ||
+ | @echo " clean - smazat binárku" | ||
+ | |||
+ | ahoj: ahoj.c | ||
+ | gcc -Wall -o ahoj ahoj.c | ||
+ | |||
+ | clean: | ||
+ | rm -f ahoj | ||
+ | |||
+ | Zadáme-li příkaz <code>make</code> bez parametru, provede se implicitní pravidlo (první pravidlo v souboru), což je ''help''. Pro vyvolání dalších pravidel je potřeba, aby bylo pravidlo zadáno příkazu <code>make</code> jako parametr: | ||
+ | |||
+ | make | ||
+ | make ahoj | ||
+ | make clean | ||
+ | |||
+ | Pravidlo ''clean'' smaže vytvořený binární soubor. Takové pravidlo zpravidla maže všechny soubory, které lze znovu získat ze zdrojových souborů, které jsou ponechány. | ||
== Cvičení == | == Cvičení == |
Verze z 9. 3. 2010, 19:57
Nástroj make umožňuje pomocí předisů provádět jednoduše podmíněnou kompilaci. Předpisy se obvykle umisťují do souboru Makefile.
Obsah
Ruční překlad programu
Mějme jednoduchý program v souboru ahoj.c:
#include <stdio.h>
void main()
{
printf("Ahoj svete!\n");
}
Kompilaci provedeme příkazem:
gcc -Wall -o ahoj ahoj.c
Přeložený program můžeme spustit:
./ahoj
Automatický překlad
Automatický překlad pak může obstarat níže uvedený jednoduchý soubor Makefile. Při přepisování souboru je důležité dát pozor na to, že výkonné řádky MUSÍ začínat znakem tabelátor (tj. tabelátor je na začátku řádku s příkazem gcc):
ahoj: ahoj.c gcc -Wall -o ahoj ahoj.c
Ve výše uvedeném příkladu je zavedeno pravidlo s názvem ahoj. Protože je v souboru uvedeno jako první, je i tzv. implicitním pravidlem. Na začátku řádku je až ke znaku dvojtečka uveden název pravidla. Pak jsou uvedeny závislosti, podle kterých bude rozhodnuto, jestli se mají provést výkonné řádky, které následují. V tomto případě se posuzuje, zda soubor ahoj je novější, než soubor ahoj.c.
Zavoláme-li příkaz make (bez parametru), dojde k přeložení programu podle implicitního pravidla (zde prvního uvedeného, tj. podle pravidla ahoj). Zavoláme-li jej znovu, oznámí nám, že překlad není nutný. Důvodem je fakt, že soubor ahoj.c je staší, než soubor ahoj (zdrojový text je starší, než přeložený program). Budeme-li editovat soubor ahoj.c, bude čas jeho poslední změny novější, než čas poslední změny přeloženého programu (soubor ahoj). Proto bude po zavolání příkazu make opět provedena kompilace. Aby nebylo nutné editorem soubor otevřít, provést změnu a výsledek uložit, lze využít příkaz touch ahoj.c
, který změní čas poslední modifikace souboru.
Další cíle příkazu make
Cíle jsou v souboru Makefile
pravidla (návěští), která lze provést tak, že jejich název přidáme jako parametr příkazu make
. Následující soubor Makefile
definuje pravidla help a clean:
help: @echo "Program $(NAZEV) verze $(VERZE)" @echo "Pouziti: make prikaz" @echo "prikaz: help - napoveda" @echo " ahoj - prelozit program" @echo " clean - smazat binárku" ahoj: ahoj.c gcc -Wall -o ahoj ahoj.c clean: rm -f ahoj
Zadáme-li příkaz make
bez parametru, provede se implicitní pravidlo (první pravidlo v souboru), což je help. Pro vyvolání dalších pravidel je potřeba, aby bylo pravidlo zadáno příkazu make
jako parametr:
make make ahoj make clean
Pravidlo clean smaže vytvořený binární soubor. Takové pravidlo zpravidla maže všechny soubory, které lze znovu získat ze zdrojových souborů, které jsou ponechány.
Cvičení
- Příklad 1
- Vytvořte Makefile pro svůj program.
- Příklad 2
- Vytvořte soubor Makefile, který bude umět tyto činnosti: all, program, test, debug, clean. Cíl all přeloží a otestuje vás program, cíl program (tj. název vašeho programu) program jen přeloží, cíl test ho otestuje (tj. spustí s různými parametry a zkontroluje výstup), cíl debug program přeloží včetně ladících informací a cíl clean smaže všechny soubory (včetně dočasných ze sekce test), kromě souborů nutných pro opětovný překlad programu.
- Příklad 3
- Vytvořte soubory Makefile ve stromové struktuře adresářů. Hlavní soubor Makefile v kořenovém adresáři této struktury bude volat soubory Makefile v podadresářích.
Další zdroje
Příkaz make a struktura řídícího souboru Makefile je také vysvětlena v textu od Michaely Knorrové (PDF, ODT, HTML, DOC).