Překlad se závislostmi (make a soubor Makefile)

Z Milan Kerslager
Verze z 20. 4. 2010, 10:41, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (Založení článku)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

Překlad se závislostmi využívá schopnosti příkazu make, která umožňuje porovnávat časy poslední modifikace souborů a na základě toho rozhodnout, zda budou provedeny výkonné řádky příslušného pravidla. Z tohoto důvodu se do pravidla za dvojtečku zapisuje seznam souborů, na kterých vykonání pravidla závisí. Překlad se závislostmi se používá zejména u větších projektů, které je vhodné překládat po menších částech (do tak zvaného object kódu). Při překladu je pak pomocí závislostí přeložena jen ta část, která se změnila a ostatní části jsou použity z minulého překladu.

Mějme větší projekt, který se skládá ze tří souborů: ahoj.c (hlavní program), funkce.c (soubor s funkcemi používanými hlavním programem) a funkce.h (prototypy funkcí ve formě hlavičkového souboru):

Soubor ahoj.c obsahuje direktivu preprocesoru pro vložení hlavičkového souboru funkce.h, protože obsahuje prototyp funkce tiskni(), která je v kódu použita:

#include "funkce.h"

int main()
{
  tiskni();
  return 0;
}

Soubor funkce.c obsahuje výkonný kód funkcí, které používáme v hlavním programu. Je v něm realizována funkce tiskni(). V rámci souboru je nutné volat pomocí direktivy preprocesoru vložení hlavičkového souboru stdio.h, protože obsahuje prototyp funkce printf(), která je ve funkci tiskni() používána:

#include <stdio.h>

void tiskni()
{
  printf("Ahoj!\n");
}

Hlavičkový soubor funkce.h obsahuje prototypy funkcí, které jsou umístěny v souboru tiskni.c:

void tiskni()

Makefile

Soubor Makefile, který bude na základě nadefinovaných závislostí schopen přeložit následující program:

ARGS	= -Wall

all: ahoj

ahoj: ahoj.o funkce.o
	gcc $(ARGS) ahoj.o funkce.o -o ahoj

ahoj.o: ahoj.c funkce.h
	gcc $(ARGS) -c ahoj.c

funkce.o: funkce.c
	gcc $(ARGS) -c funkce.c

clean:
	rm -fv *.o ahoj