Entendiendo el comando Make (II)
Ayer hacía una breve introducción al comando make. Hoy voy a seguir comentando cosas bastante interesantes
de dicho comando.
Reglas
El objetivo de una regla de un fichero Makefile no tiene porque ser un fichero. Podemos crear reglas del siguiente estilo:
clean: rm *.o a.out configure.h
Con esto conseguimos que make funcione como un script.
No es necesario que las reglas tengan acciones. Es posible usar varios objetivos bajo un mismo nombre, y de esta manera conseguir agruparlos:
all: objetivo1 objetivo2 objetivo3 objetivo1: objetivo2
Las reglas pueden tener uno o varios objetivos:
f1 f2: f3 head f3 > f1 tail f3 > f2
Este caso tiene sentido siempre que f1 y f2 se quieran actualizar a la vez, como si fueran una misma entidad.
make invoca una shell diferente por cada línea de la lista de acciones. Si hacemos cd en una línea, no afecta
a la línea siguiente. Si queremos que ocurra, tendremos que escapar las líneas con el caracter “\” seguido de un salto de línea y un tabulador.
Si una acción devuelve un resultado distinto de 0, las siguientes acciones dejan de ejecutarse. Si lo que se pretende
es que se ejecuten todas las acciones, independientemente del resultado de las mismas tendremos que utilizar el signo menos.
objetivo: requisito1 ls - rm fichero cd /home
Otras cosas
Los comentarios en los ficheros Makefile comienzan por #.
En los ficheros Makefile, es posible declarar variables. Estas se definen de la siguiente forma:
NOMBRE = valor
y se obtiene su resultado:
${NOMBRE} o $(NOMBRE)
Es frecuente que los comandos esten declarados en variables:
CC = gcc holamundo: holamundo.c ${CC} -o holamundo holamundo.c
Cuando queramos añadir un $ , tendremos que escaparlo con la barra del siete “\$” o con dos signos dolar “$$”
La variable $? representa la lista de requisitos más nuevos que el objetivo.