Mejorando los Makefiles con variables automáticas

Existen algunas variables automáticas que permiten escribir los archivos Makefiles de una forma genérica, de esta forma, si se requiere modificar el nombre de un archivo o regla, sólo sea necesario realizar los cambios en un solo lugar, o en la menor cantidad posible y así evitar errores.

Las variables automáticas más empleadas son:


%.pdf: %.ps
	ps2pdf $<

%.zip: %.pdf
	echo $*.zip $<
	
PDF = documento1.pdf documento2.pdf
ZIP = documento1.zip documento2.zip

pdf: $(PDF)

paquete: $(PDF)
	tar zcvf $@.tar.gz $?

zip: $(ZIP)

clean:
	rm -f *.pdf *.tar

	       

En el ejemplo, se han definido dos reglas implícitas. La primera indica como convertir un archivo PostScript a PDF y la segunda, como comprimir un archivo PDF en formato ZIP. También se han definido cuatro reglas, dos de ellas son implícitas (pdf y zip), donde sólo se han indicado sus prerequisitos y las otras dos (paquete y clean) son explícitas.

Cuando se ejecute la regla paquete, make analizará las dependencias, es decir, verificará si existen los correspondientes archivos PDF, sino, los construye, y luego para a ejecutar el comando indicado en la regla. La variable $? será expandida a "documento1.pdf documento2.pdf" y la variable $@ será expandida a "paquete". De esta forma, el comando a ejecutar será:

	tar zcvf paquete.tar.gz documento1.pdf documento2.pdf
	       

En el caso de la regla zip, al resolver las dependencias se ejecutará:

	zip documento1.zip documento1.pdf
	zip documento2.zip documento2.pdf
	       

Es decir, el patrón buscado es "documento1" y "documento2", el cual corresponde a la expresión %. Dicha operación se realizar por cada archivo .pdf.