A make segédprogram

  1. Bevezetés

  2. A Makefile szerkezete. Példa.

  3. Különleges szabályok

  4. Változók

1. Bevezetés

Tételezzük fel, hogy egy foo programot szerkesztünk, amely 5 fejlécállományból 1.h, 2.h, 3.h, 4.h, and 5.h és 5 ezeknek megfelelo forrásállományból áll 1.c, 2.c, 3.c, 4.c, and 5.c. A fofüggvényt a main.c állomány tartalmazza. Azt is tételezzük fel, hogy a 2.c állomány egy hibát tartalmaz, amelyet sikerült kijavítanunk. Egy új foo program eloállításához újra kell fordítanunk a hibás forrásállományt, utána pedig újra felépítenünk a végrehajtható állományunkat. Ha a hiba történetesen egy olyan fejlécállományban volt, amelytol az összes többi forrásállomány függött, akkor az összes forrásállományt újra kel fordítanunk. Egy nagy szoftver esetén nem túl kellemes kideríteni a függoségeket és csak azt fordítani újra amit ténylegesen szükséges. Tulajdonképpen az a szerepe a make segédprogramnak, hogy leegyszerusítse a nagy programok fordítását.



Miért használjuk a make segédprogramot

A make segédprogram gyakorlatilag egy Makefile állomány segítségével fejti ki hatását. Ez a Makefile állomány a program fordítását vezérlo utasításokat tartalmazza.

Nem kötelezo a Makefile megnevezést hasznáni, viszont ajánlott. Amennyiben a Makefile megnevezést használjuk, a make parancs egyszeru kiadása elégséges, hogy elvégezze az újrafordítást. Ha a fordítást vezérlo parancsokat egy más nevu állományban helyeztük el, akkor a



make -f <allomanynev>

parancs kiadása fogja a parancsállomány végrehajtását eredményezni.



2. A Makefile szerkezete. Példa

A parancsállomány háromféle egységet tartalmaz, éspedig cél, függoségek és szabályok.



cél: függoségek

    szabály1

    szabály2

...

A szabályokat tartalmazó sorok minig tabulátorral kezdodnek!!!

Példa

# client végrehajtható állomány eloállítása

client: conn.o util.o main.o
g++ util.o conn.o main.o -o client

# main.o tárgykódállomány eloállítása main.o: main.cpp g++ -c main.cpp # util.o tárgykódállomány eloállítása util.o: util.cpp util.h g++ -c util.cpp # conn.o tárgykódállomány eloállítása conn.o: conn.cpp conn.h g++ -c conn.cpp

A fenti példa két fejlécállományt és három C++ forrásállományt tartalmaz. A parancsállomány elso célja a végrehajtható állomány (client) eloállítására vonatkozik. Ez három tárgykód állománytól függ, amelyek eloállítására külön-külön egy-egy szabály van.

A # karakter a megjegyzéseket tartalmazó sorokat vezeti be.



3. Különleges szabályok

Bizonyos szabályokat csoportosíthatunk és egy címke alatt elhelyezhetünk. Ezen szabályok végrehajtását úgy érhetjük el, ha a make segédprogramot a címkével argumentumként futtatjuk.

Tételezzük fel, hogy egy címke alá helyezzük az összes törlési szabályt. Az elozo Makefile esetében ez a következoképpen nézne ki:



clean:

    rm *.o

    rm client

Végrehajtás:

make clean



4. Változók

Változót a következo paranccsal lehet létrehozni:

VAR_NAME=value

Általában a változóneveknek nagybetus neveket használunk.

OBJECTS=main.o test.o

Egy változó értékét a $ jellel kaphatjuk meg. Például:

$(VAR_NAME)
A változók különlegesen hasznosak függoségek megadásánál hiszen ha például a végrehajtható állomány 10 darab tárgykódállománytól függ, amelyekre egy változóval is hivatkozhatunk, akkor csak a változót kell beveztnünk a függoségi listába. Például: OBJECTS= a.o b.o c.o d.o e.o f.o g.o h.o i.o j.o server: server.c $(OBJECTS) gcc -o server $(OBJECTS) server.c