La idea básica de los Makefiles es que son como un .bat. Tienen varias secciones, y dentro de cada sección el grupo de comandos que quieras ejecutar:
Código:
seccion1:
comando1
comando2
comando3
seccion2:
comando1
comando2
seccion3: seccion2
comando5
comando6
(los espacios al inicio de las líneas son tabuladores. Obligatoriamente)
Ese archivo lo guardas como Makefile y ya está. Para ejecutar la seccion1 escrines "make seccion1". Para ejecutar la seccion3, escribes "make seccion3". Fíjate que donde se define la seccion3 se indica de qué secciones depende: en este caso de seccion2, así que "make seccion3" ejecutará antes "seccion2".
Si pones "make", sin más, se ejecuta la primera sección. Por tradición la primera sección se llama "all", pero es una tradición que no tienes por qué seguir.
Las seccions y sus dependencias pueden ser archivos reales. Por ejemplo:
Código:
programa: main.o funciones.o
gcc -o programa main.o funciones.o
main.o: main.c
gcc -c main.c
funciones.o: funciones.c
gcc -c funciones.c
programa depende de main.o y funciones.o, y estos a su vez de main.c y funciones.c. Si modificas funciones.c, se compilará funciones.o y programa, pero no main.o. Y así.
Las secciones pueden usar wildcards. "%.o" es una sección para crear archivos .o. El código de arriba puede escribirse también de forma equivalente:
Código:
programa: main.o funciones.o
gcc -o programa main.o funciones.o
%.o: %.c
gcc -c %<
%< significa "el archivo que ha hecho saltar la regla"
Puedes usar variables. Siguiendo con el mismo ejemplo de Makefile:
Código:
CC=gcc
CFLAGS=-O -Wall
OBJS=main.o funciones.o
all: $(OBJS)
$(CC) -o programa $(OBJS)
%.o: %.c
$(CC) $(CFLAGS) -c %<
Además, hay algunas secciones que se usan tanto que no es necesario escribirlas. Por ejemplo, la de "%.o: %.c": no la escribas, make ya supone que está:
Código:
CC=gcc
CFLAGS=-Wall -O
OBJS=main.o funciones.o
all: $(OBJS)
$(CC) -o programa $(OBJS)
(recuerda que la sección implícitamente declarada para compilar código C va a usar la variable $(CC) para el nombre del compilador, y $(CFLAGS) para las opciones del compilador.
Y ya está, no tienes que saber más de Makefiles.
Marcadores