- Construir las reglas de dependencia y construcción de los programas
realizados en el práctico anterior: holamundo.o, prueba.o,
max.o, promedio.o, holamundo, libmath.a,
libmath.so y prueba (compilado contra libmath.so)
- Crear un objetivo artificial (.PHONY) denominado all
que dependa de holamundo, prueba, libmath.a
y libmath.so. Colocarlo en el primer lugar, de manera que
funcione implíscitamente cuando no se indica otra cosa en el comando
make.
- Borrar todos los productos (los .o, los .so, los
.a, prueba y holamundo) y ejecutar make.
- Crear reglas implíscitas para generar los .o a partir de
los .c, y para crear los ejecutables a partir de los .o.
Eliminar todos los comandos de aquellas reglas que ya no lo necesiten.
- Crear una variable PREFIX apuntando a /usr/local,
y las variables BINDIR, LIBDIR e INCLUDEDIR
apuntando a bin, lib e include respectivamente,
dentro de PREFIX.
- Crear la variable BINTARGETS que apunte a prueba
y holamundo; LIBTARGETS que apunte a libmath.so
y libmath.a e INCLUDES que apunte a promedio.h
y max.h; OBJECTS que apunte a holamundo.o,
prueba.o, max.o y promedio.o y TARGETS
que incluya BINTARGETS y LIBTARGETS.
- Generalizar las reglas que se puedan generalizar utilizando la variable
TARGETS.
- Crear un objetivo artificial clean que borre del directorio
los archivos de backup (terminados en `~'), los objetos
y los objetivos.
- Crear un objetivo artificial install que instale los encabezados,
las librerías y los binarios en sus respectivos directorios, y ejecute
ldconfig a fin de actualizar el caché del vinculador dinámico.
Utilizar el comando install para asegurarse de que los directorios
de instalación existan, para asignar correctamente los permisos y
para comprimir (strip) los binarios.
- Crear un objetivo artificial uninstall que revierta los pasos
del objetivo install, eliminando toda huella del proyecto
de los directorios del sistema.
- Crear una variable SOURCES que se forme de lo que contiene OBJECTS,
cambiando .o por .c.
-
- SOURCES=$(OBJECTS:.o=.c)
- Crear un objetivo artificial dep que dependa del archivo
.depend.
- Crear una regla que construya el archivo .depend a partir
de los fuentes utilizando el comando gcc -M, eso creará las
dependencias entre los .o y los .h.
- Crear una regla template que a partir de los OBJETOS se cree la dependencia
entre los .o y los .c.
- Incluir el archivo .depend al final del Makefile.
Utilizar la directiva -include.
- Probar todo, leer el contenido del archivo .depend. Eliminar
las reglas innecesarias.