next up previous
Next: El debugger de UNIX: Up: Linux para Programadores Previous: Programas multi-módulo

El sistema de dependencia entre ficheros: make

El trabajar con programas multi-módulo tiene una desventaja: cuando nos damos cuenta, tenemos muchos ficheros que contienen funciones de biblioteca y no recordamos que dependencias existen entre ellos. Por ejemplo, supongamos que retocamos un fichero de biblioteca y que lo recompilamos, pero de este fichero dependen una larga lista de ficheros también de biblioteca. Deberemos recompilar cada uno de ellos si deseamos que los cambios realizados se noten en el programa que estamos desarrollando. Para solventar este problema, UNIX tiene la utilidad make que recompilará aquellos ficheros que necesiten ser recompilados, tras una modificación. La sintaxis de este comando es:
make -f makefile
El fichero makefile es un fichero texto que contiene las dependencias entre ficheros necesarias para que make trabaje. Por defecto, make buscará un fichero llamado makefile o Makefile en el directorio de trabajo. Si el nombre de fichero de dependencias no es éste, o está en otro directorio deberemos indicar su nombre a través del flag -f . La forma general de un fichero makefile es:

OBJETIVO: lista de dependencias con otros objetivos anteriores
          lista de comandos a realizar par conseguir OBJETIVO

Por ejemplo, un makefile para nuestro programa reverse podría ser:



width 3pt
width .3pt415pt#
# makefile para 'reverse'
#
#
# El fichero 'Reverse.o' depende de los fichero 'Reverse.c' y 'Reverse.h'.
# Si uno de ellos es modificado, entonces se ejecuta el comando:
#            cc -c Reverse.c -o Reverse.o
# que compila la función y crea un fichero llamado 'Reverse.o'
#
Reverse.o:  Reverse.c Reverse.h
            cc -c Reverse.c -o Reverse.o
#
# El fichero ejecutable 'reverse' sera compilado si cambia el fichero
# 'Reverse.o' o 'reverse.c'.
#
reverse:    Reverse.o reverse.c
            cc reverse.c Reverse.o -o reverse
width .3pt
depth .3pt width -3pt
Para compilar el programa reverse escribiremos:



width 3pt
width .3pt415ptdali: % make reverse
cc -c Reverse.c -o Reverse.o
cc reverse.c Reverse.o -o reverse
dali: %
width .3pt
depth .3pt width -3pt

Debemos de dar el parámetro reverse porque este es el objetivo final que va a conseguir la utilidad make . Si deseamos que únicamente se genere Reverse.o, debiéramos de escribir:



width 3pt
width .3pt415ptdali: % make Reverse.o
cc -c Reverse.c -o Reverse.o
dali: %
width .3pt
depth .3pt width -3pt

No es necesario escribir make -f makefile reverse porque make busca por defecto el fichero makefile. La utilidad make puede usarse en general para establecer dependencias entre ficheros de cualquier clase, por ejemplo, para ficheros en formato TEX. Por último, cuando intentamos compilar y no hemos realizado ninguna modificación, make no trabaja y nos presenta el siguiente mensaje:



width 3pt
width .3pt415ptdali: % !!
make reverse
make: `reverse' is up to date.
dali: %
width .3pt
depth .3pt width -3pt
El debugger de UNIX: dbx
next up previous
Next: El debugger de UNIX: Up: Linux para Programadores Previous: Programas multi-módulo
Vicente González Ruiz
1998-07-13