El proceso de escritura de un Makefile es el siguiente:
- Definir variables: defina variables como el compilador y las opciones de compilación.
- Definir archivo de destino: defina el nombre del archivo de destino.
- Definir archivos fuente: Defina todos los archivos fuente.
- Definir reglas: defina las reglas para compilar cada archivo fuente en un archivo objeto.
- Definir pseudodestino: define un pseudodestino que limpia archivos objeto y otros archivos intermedios.
El siguiente es un ejemplo de Makefile, suponiendo que cada directorio tiene un .c
archivo fuente que termina en que debe compilarse en el archivo ejecutable correspondiente:
CC = gcc
CFLAGS = -Wall -Wextra -Werror
SRCDIRS = src1 src2 src3
TARGETS := $(patsubst %, %/target, $(SRCDIRS))
all: $(TARGETS)
%/target: %/*.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY: clean
clean:
find . -name target -type f -delete
CC
Define el compilador utilizado, aquí se utiliza gcc.CFLAGS
Las opciones de compilación están definidas y aquí se habilitan algunas opciones de advertencia.SRCDIRS
Define el directorio donde residen todos los archivos fuente.TARGETS
es una lista de todos los archivos ejecutables, que utiliza la función patsubst para reemplazar la ruta del archivo fuente con la ruta del archivo ejecutable.all: $(TARGETS)
Indica que todo depende de todos los archivos ejecutables, y$ make
todos los archivos ejecutables se pueden generar escribiendo en la línea de comando.%/target: %/*.c
Indica una regla, compila todos los archivos de un directorio.c
en los archivos ejecutables correspondientes y los almacena en untarget
archivo denominado en el directorio..PHONY: clean
Indica que clean es un pseudoobjetivo, no un archivo real, y todos los archivos ejecutables se pueden eliminar escribiendo en la línea de comando. donde el comando se usa para buscar el archivo nombrado y eliminarlo.$ make clean
find
target