Řízení překladu (make a soubor Makefile): Porovnání verzí
(→Automatický překlad: více pravidel) |
m (→Další cíle příkazu make: doplnění) |
||
Řádka 48: | Řádka 48: | ||
rm -f ahoj | 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: | + | 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. Zavináč před příkazy <code>echo</code> způsobí, že se prováděný příkaz nebude vypisovat (tj. nebude vidět řádek s příkazem) a bude tedy vypsán pouze výstup tohoto příkazu. |
+ | |||
+ | Vyzkoušejte a porovnejte výstup následujících příkazů: | ||
make | make | ||
+ | make help | ||
make ahoj | make ahoj | ||
make clean | 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. | + | První příkaz provede implicitní pravidlo, takže je vypsána nápověda, což provede též druhý řádek. Třetí řádek způsobí překlad programu. Čtvrtý řádek smaže přeložený soubor, takže po novém vyvolání překladu dojde k novému překladu. 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, 20:31
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. Zavináč před příkazy echo
způsobí, že se prováděný příkaz nebude vypisovat (tj. nebude vidět řádek s příkazem) a bude tedy vypsán pouze výstup tohoto příkazu.
Vyzkoušejte a porovnejte výstup následujících příkazů:
make make help make ahoj make clean
První příkaz provede implicitní pravidlo, takže je vypsána nápověda, což provede též druhý řádek. Třetí řádek způsobí překlad programu. Čtvrtý řádek smaže přeložený soubor, takže po novém vyvolání překladu dojde k novému překladu. 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).