Un archivo Makefile es un archivo de texto en el cual se distinguen
cuatro tipos básicos de declaraciones:
Comentarios.
Variables.
Reglas explícitas.
Reglas implícitas.
Al igual que en los programas, contribuyen a un mejor
entendimiento de las reglas definidas en el archivo.
Los comentarios se inician con el caracter #, y se ignora
todo lo que continúe después de ella, hasta el final de
línea.
Se definen utilizando el siguiente formato:
De esta forma, se simplifica el uso de los archivos
Makefile. Para obtener el valor
se emplea la variable encerrada entre paréntesis y con el
caracter
$ al inicio, en este caso
todas las instancias de
$(nombre) serán reemplazadas
por
dato.
Por ejemplo, la siguiente definición
origina la siguiente línea:
y será interpretada como:
Sin embargo, pueden contener más de un elemento
dato. Por ejemplo:
objects = programa_1.o programa_2.o programa_3.o \
programa_4.o programa_5.o
programa: $(objects)
gcc -o programa $(objects)
|
Hay que notar que
make hace distinción
entre mayúsculas y minúsculas.
Estas le indican a
make qué archivos dependen
de otros archivos, así como los comandos requeridos
para compilar un archivo en particular. Su formato
es:
archivoDestino: archivosOrigen
comandos # Existe una caracter TAB (tabulador) antes de cada comando.
|
Esta regla indica que, para crear
archivoDestino,
make
debe ejecutar
comandos sobre
los archivos
archivosOrigen.
Por ejemplo:
main: main.c funciones.h
gcc -o main main.c funciones.h
|
significa que, para crear el archivo de destino
main, deben existir los
archivos
main.c y
funciones.h y que, para crearlo,
debe ejecutar el comando:
gcc -o main main.c funciones.h
|
Son similares a las reglas
explícitas, pero no indican los comandos a
ejecutar, sino que make
utiliza los sufijos (extensiones de los archivos)
para determinar que comandos ejecutar. Por ejemplo:
funciones.o: funciones.c funciones.h
|
origina la siguiente línea:
$(CC) $(CFLAGS) -c funciones.c funciones.h
|
Existe un conjunto de variables que se emplean para
las reglas implícitas, y existen dos categorías: aquellas
que son nombres de programas (como CC) y aquellas que
tienen los argumentos para los programas (como CFLAGS).
Estas variables son provistas y contienen valores
predeterminados, sin embargo, pueden ser modificadas,
como se muestra a continuación:
CC = gcc
CFLAGS = -Wall -O2
|
En el primer caso, se ha indicado que el compilador
que se empleará es
gcc y
sus parámetros son
-Wall -O2.