Curset de C avancat: Makefile

Notes previes

Les tabulacion i els canvis de linies son elements sintactics del makefile, No els consideris nomes quelcom estetic!!! Una barra al final de la linia fa que s'ignori el canvi de linia. Aixo permet dividir, sense trencar la sintaxi, una linia en dues quan tot junt queda massa llarg.

Declaracio de dependencies:

La filosofia dels makefile es que si modifiquem un fitxer, haurem de modificar tots els que en depenguin d'ell. Aquest fet s'ho expresem de la seguent manera.

fitxer1 : fitxer2 fitxer3 fitxer4 ...
[tab]comanda1
[tab]comanda2
[tab]comanda3
[tab]comanda4
......

Aixo vol dir que haurem de restaurar "fitxer1" sempre que modifiquem "fitxer2", "fitxer3"... i ho restaurarem executat "comanda1", "comanda2"... en aquesta sequencia.

Fitxer all:

Cal que fem, a mes, una dependencia extra;

all: fitxer_final1 fitxer_final2 ...

Aquesta dependencia afegida indica al makefile per on començar a analitzar les dependencies.

Les comandes que hi fiquem s'executaran sempre que canvii qualsevol cosa.

Exemple 1:

Imaginem que tenim el seguents arxius:

  • complex.c
  • complex.h
  • llistag.c
  • llistag.h
  • main.c

Sabem que a la llarga tindrem els corresponents arxius .o:

  • complex.o
  • llistag.o
  • main.o
  • practica.exe

El makefile final sera kelkomxis:

all: practica.exe

practica.exe :  main.o complex.o llistag.o
[tab] gcc -o practica.exe main.o complex.o llistag.o

main.o :  main.c complex.h llistag.h 
[tab] gcc -c main.c -ansi

complex.o :  complex.c complex.h
[tab] gcc -c complex.c -ansi

llistag.o : llista.c llista.h
[tab] gcc -c llistag.c -ansi

Declaracio d'alies:

Els alias son semblants a les constants #define del C.

Es declaren aixi:

NOMALIAS = text a substituir

On vulguis fer-les servir, has de posar:

$(NOMALIAS)

Aixo sera substituit pel que vagi al darrera del signe igual a la declaracio.

A la hora de definir un alies, has de posar tot el text a substituir a la mateixa linea o fer servir la barra per dir que contiuna en la seguent.

Exemple 2:

Per que volem els alias? Per exemple imaginem que a vegades modifiquem l'opcio -ansi per una altra (Volem compilar amb C de K&R o en C++) Si ho hem, de cambiar a cada linia on surt -ansi i pot ser molt feixuc pero si ja d'entrada fem servir alias, despres nomes haurem de modificar la primera linia.

opcions=-ansi

all: practica.exe

practica.exe :  main.o complex.o llistag.o
[tab] gcc -o practica.exe main.o complex.o llistag.o

main.o :  main.c complex.h llistag.h 
[tab] gcc -c main.c $(opcions)

complex.o :  complex.c complex.h
[tab] gcc -c complex.c $(opcions)

llistag.o : llista.c llista.h
[tab] gcc -c llistag.c $(opcions)

Si teniu problemes amb xo mailear-me.

Vokimon (is04069)