Make, Imake y Autoconf

Make

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 $


Notas:


Luis.Colorado@Hispalinux.ES
Puentelarrá 31
28031 MADRID
http://SLUG.HispaLinux.ES/~luis/