En un proyecto complejo, podemos llegar a tener varios fuentes, incluso un montón de ellos, y puede llegar a hacerse bastante tediosa la tarea de la compilación, pudiendo tener una situación como la de la figura:
En la situación descrita en la figura, realmente se puede apreciar que no tiene sentido compilar el modulo 3, en fortran, si se ha modificado solamente el modulo 1, escrito en C.
Se puede apreciar rapidamente la existencia de una serie de dependencias entre los fuentes de un proyecto y los objetos y programas resultantes.
De este modo, en el ejemplo anterior, podemos ver que modulo1.o depende
de modulo1.c
1, y que ejecutable
lo hace, a su vez, de los tres ficheros .o
.
Pues bien, sería interesante poder disponer de una utilidad que permita la
especificación de las dependencias de unos ficheros a otros y la forma de
obtener aquellos. De hecho, si hacemos explícita la forma de hacer depender
los ficheros entre sí (especificamos como se obtiene un fichero a partir de
los que lo producen) realmente no tendremos ninguna dependencia del entorno
de trabajo (no tenemos por qué ceñirnos a entornos de desarrollo de software) y
podremos atajar cualquier proyecto con la utilidad make(1)
.
2
La especificación make(1)
para conseguir el efecto
deseado, la incluiremos en un fichero llamado Makefile
y
tendrá una forma como la siguiente:
# $Id: makefile.1,v 1.1 1999/07/21 23:21:02 luis Exp $ # Author: Luis.Colorado@SLUG.HispaLinux.ES # Date: Thu Jul 22 01:17:36 MEST 1999 ejecutable_objs = modulo1.o modulo2.o modulo3.o ejecutable: $(ejecutable_objs) ld -o ejecutable $(ejecutable_objs) modulo1.o: modulo1.c gcc -c modulo1.c modulo2.o: modulo2.c gcc -c modulo2.c modulo3.o: modulo3.f f77 -c modulo3.f # $Id: makefile.1,v 1.1 1999/07/21 23:21:02 luis Exp $ |
modulo1.c
puede realmente
incluir (a través de una directiva #include
) uno o varios ficheros
de cabecera, haciendo que la dependencia de modulo1.o
no
lo sea solamente de modulo1.c
, sino también de los
ficheros de cabecera incluidos por éste.
m4(1)
, y una serie de macros
desarrolladas por el autor para conseguir efectos de presentación
http://SLUG.HispaLinux.ES/~luis/