Entendiendo make y los archivos Makefiles | ||
---|---|---|
Anterior |
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:
$<. El nombre del primer prerequisito.
$*. En la definición de una regla implícita, tiene el valor correspondiente al texto que reemplaza el símbolo %.
$?. El nombre de todos los prerequisitos.
$@. El nombre del archivo del objetivo de la regla.
%.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.