Make
Enlaces y referencias
- Ref: GNU make manual
- Ref: Managing Projects with GNU make
- Ref: These are not static pattern rules ...
Conceptos básicos
Reglas
Una regla indica cuándo y cómo construir ciertos archivos.
OBJETIVOS : PRERREQUISITOS PROGRAMA ...
Los OBJETIVOS son los archivos que se deben construir si no existen o si los archivos listados en los PRERREQUISITOS a su vez tampoco existen o han sido modificados con fecha posterior a la de los OBJETIVOS. La construcción se lleva a cabo ejecutando cada uno de los programas mencionados en líneas independientes.
Variables automáticas
- Sus valores se calculan de nuevo en cada regla ejecutada.
- Estos valores sólo pueden emplearse en la ejecución de programas (command script).
- No pueden usarse en la lista de objetivos de una regla.
- Tampoco pueden emplearse en la lista de prerrequisitos de una regla.
Variable | Descripción | Comentarios |
---|---|---|
$@
|
Nombre de archivo del objetivo de la regla |
|
$%
|
Nombre del miembro objetivo cuando el objetivo es un miembro de un archivo | |
$<
|
Nombre del primer prerrequisito. | |
$?
|
Nombres de todos los prerrequisitos que son más nuevos que el objetivo (separados por espacios en blanco). | |
$^
|
Nombre de todos los prerrequisitos (separados por espacios en blanco). |
|
$+
|
Igual que el anterior ($^ ) pero se incluyen todos los nombres en el orden en el que aparecen en el archivo Makefile.
|
|
$|
|
Nombre de todos los prerrequisitos | |
$*
|
Raíz con la que una regla implícita coincide. |
Ejemplo:
# Objetivo de la regla Prerequisito # ------v------- ----v---- $(HOME)/.myarchivo.conf: myarchivo.conf install $? $@
Funciones
- Ref: Builting functions
A menos que se diga lo contrario toda lista está formada por textos separados por espacios en blanco.
Análisis y substitución en textos | |
---|---|
Función | Descripción |
$(subst BUS,REEM,DONDE)
|
Busca BUS en DONDE y lo reemplaza por REEM. |
$(filter PATRONES, TEXTO)
|
Encuentra todas las palabras (separadas por espacios en blanco) en TEXTO que emparejan con alguno de los PATRONES y eliminando aquellas palabras que no lo hacen.
Los patrones se escriben empleando el carácter porcentaje ( |
$(filter-out PATRONES, TEXTO)
|
Devuelve todas las palabras encontradas en TEXTO que no emparejan con algún PATRON, eliminando de TEXTO aquellas que lo hacen con uno o más de ellos.
Es la función opuesta a la función |
Nombres de archivos | |
Función | Descripción |
$(dir RUTAS)
|
Extrae la parte correspondiente al directorio de cada una de las RUTAS de archivo recibidas. |
$(notdir RUTAS)
|
Extrae la parte correspondiente al nombre de cada una de las RUTAS de archivo recibidas. |
$(basename RUTAS)
|
Extrae el nombre y la ruta de cada una de las RUTAS de archivos recibidas dejando fuera la extensión de los mismos. |
$(addsuffix SUFIJO,NOMBRES)
|
Añade el texto SUFIJO al final de cada uno de los nombres recibidos. |
$(addprefix PREFIJO,NOMBRES)
|
Añade el texto PREFIJO al comienzo de cada uno de los nombres recibidos. |
$(wildcard PATRON)
|
Crea una lista de nombres de archivos empleando PATRON como expresión de
búsqueda. |
Ejecutando programas | |
Función | Descripción |
$(shell TEXTO)
|
Esta función toma un TEXTO como una línea de órdenes, la pasa a un shell externo y recupera su salida para utilizarla como producto de su llamada. |
Ejemplos
Estos son algunos ejemplos de las funciones arriba citadas:
# Queremos encontrar todos los archivos de un directorio TODOS_LOS_ARCHIVOS=$(wildcard mydir/*) # y ahora queremos excluir algunos ARCHIVOS_FINALES=$(filter-out %.bak %.orig %.ptkdb, $(TODOS_LOS_ARCHIVOS))