El programa make define por cuenta propia una serie de macros de uso común. Esto puede ser muy útil a la hora de reducir el tamaño de nuestros Makefiles, aunque quizás, para el usuario novel hace el código algo difícil de entender.
Aquí se presentan las macros internas más importantes3.2
$@ :Tiene el valor del objetivo actual, sólo se puede usar en
lineas de comandos.
$? :Tiene el valor de la lista de prerrequisitos que son más nuevos
que el objetivo, sólo se puede utilizar en las lineas de comandos.
$$@ :Tiene el valor del objetivo actual, sólo se puede usar en los
prerrequisitos.
$CC :Compilador de C por defecto
$CFLAGS :Opciones para CC
Podemos ahora reescribir nuestro Makefile (pág.
) de la
siguiente manera:
#Makefile de mi práctica, situado en el mismo directorio que
#el resto de archivos de mi práctica
LIBPATH =/home/alcortes/universidad/lao/practicas/bibliotecas/
LIBS = $(LIBPATH)mi_biblioteca1.o $(LIBPATH)mi_biblioteca2.o
OBJS = $(LIBS) mi_programa.o
mi_ejecutable: $OBJS
$CC -o $@ $OBJS
mi_programa.o: mi_programa.c
$CC -c $?
mi_biblioteca1.o: mi_biblioteca1.c
$CC -c $?
mi_biblioteca2.o: mi_biblioteca2.c
$CC -c $?
En el caso de que queramos construir muchos ejecutables, de forma que cada uno de ellos depende únicamente de un solo fichero fuente, este sencillo makefile nos soluciona le problema:
EJEC = eje1 eje2 eje3 eje3 eje4 eje5
$(EJEC) : $$@.c
$(CC) -O $? -o $@
De forma que ejecutando
$ make eje3 eje5
Compilaremos los fuentes eje3.c y eje5.c.