Řízení překladu (make a soubor Makefile): Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
(Rozšíření)
(Rozšíření)
Řádka 30: Řádka 30:
  
 
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.
 
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.
 +
 +
== 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 ==
 
== Další zdroje ==
  
 
Příkaz '''make''' a struktura řídícího souboru '''Makefile''' je také vysvětlena v textu od Michaely Knorrové ([http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.pdf PDF], [http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.odt ODT], [http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.html HTML], [http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.doc DOC]).
 
Příkaz '''make''' a struktura řídícího souboru '''Makefile''' je také vysvětlena v textu od Michaely Knorrové ([http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.pdf PDF], [http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.odt ODT], [http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.html HTML], [http://www.nti.tul.cz/~kerslage/files/Makefile.Knorrova/make_UXC.doc DOC]).

Verze z 22. 5. 2008, 12:09

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.

Ruční překlad programu

Mějme jednoduchý program v souboru ahoj.c:

#include <stdio.h>

int main()
{
  printf("Ahoj svete!\n");
}

Kompilaci provedeme příkazem:

gcc -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 -o ahoj ahoj.c

Ve výše uvedeném přikladu 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.

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).