Make Tutorial

Embed Size (px)

DESCRIPTION

Tutorial make

Citation preview

La herramienta Make

La herramienta Make

La herramienta Make permite trabajar con programas compuestos por mltiples mdulos. En general es suficiente con modificar el fichero de ejemplo que se proporciona para compilar nuevos programas. Para quien est interesado se presenta aqu una pequea introduccin a esta herramienta.

Supongamos el siguiente problema de mantenimiento de una coleccin grande de archivos fuente:

main.c f1.c ...... fn.c

Normalmente se compilarn los archivos de la siguiente manera:

gcc -o main main.c f1.c ....... fn.c

Sin embargo si se sabe que algunos archivos han sido compilados previamente y sus archivos fuente no han sido cambiados desde entonces, entonces se puede ahorrar tiempo de compilacin ligando los cdigos objetos de estos archivos, es decir:

gcc -o main main.c f1.c ... fi.o ... fj.o ... fn.c

Se puede usar la opcin -c del compilador de C para crear un cdigo objeto (.o) para un mdulo dado. Por ejemplo:

gcc -c main.c

que crear un archivo main.o. No se requiere proporcionar ninguna liga de alguna biblioteca ya que ser resuelta en la etapa de ligamiento (link).

Se tiene el problema en la compilacin del programa de ser muy larga, sin embargo:

Se consume tiempo al compilar un mdulo .c -- si el mdulo ha sido compilado antes y no ha sido modificado el archivo fuente, por lo tanto no hay necesidad de recompilarlo. Se puede solamente ligar los archivos objeto. Sin embargo, no ser fcil recordar cuales archivos han sido actualizados, por lo que si ligamos un archivo objeto no actualizado, el programa ejecutable final estar incorrecto.

Cuando se teclea una secuencia larga de compilacin en la lnea de comandos se cometen errores de tecleo, o bien, se teclea en forma incompleta. Existirn varios de nuestros archivos que sern ligados al igual que archivos de bibliotecas del sistema. Puede ser difcil recordar la secuencia correcta.

Si se usa la herramienta make todo este control se realiza automticamente, En general slo los mdulos que sean ms viejos que los archivos fuente sern recompilados.

Los comandos especficos que se utilicen dependern del compilador elegido. Por ejemplo, si se est trabajando en Windows con el compilador Borland BCC 5.5, el comando es BCC32.

Funcionamiento de Makefile

La programacin de make es directa, bsicamente se escribe una secuencia de comandos que describe como nuestro programa (o sistema de programas) ser construido a partir de los archivos fuentes.

La secuencia de construcicn es descrita en los archivos makefile, los cuales contienen reglas de dependencia y reglas de construccin.

Una regla de dependencia tiene dos partes -- un lado izquierdo y un lado derecho separados por :

lado izquierdo : lado derecho

El lado izquierdo da el nombre del destino (los nombres del programa o archivos del sistema) que ser construido (target), mientras el lado derecho da los nombres de los archivos de los cuales depende el destino (por ejemplo, archivos fuente, archivos cabecera, archivos de datos).

Si el destino est obsoleto con respecto a las partes que lo constituyen, las reglas de construccin siguiendo las reglas de dependencia son usadas.

Por lo tanto para un programa tpico de C, cuando se ejecuta un archivo make se realizan las siguientes tareas:

1. El archivo make es ledo. El Makefile indica cuales objetos y archivos de biblioteca se requieren para ser ligados y cuales archivos cabecera y fuente necesitan ser compilados para crear cada archivo objeto.

2. La hora y la fecha de cada archivo objeto son revisados con respecto al cdigo fuente y los archivos cabecera de los cuales dependen. Si cualquier fuente o archivo cabecera son ms recientes que el archivo objeto, entonces los archivos han sido modificados desde la ltima modificacin y por lo tanto los archivos objeto necesitan ser recompilados.

3. Una vez que todos los archivos objetos han sido revisados, el tiempo y la fecha de todos los archivos objeto son revisados contra los archivos ejecutables. Si existe archivos ejecutables viejos sern recompilados.

Creacin de un Archivo Make (Makefile)

La creacin del archivo se realiza usando algn editor de textos. El archivo Makefile contiene solamente una lista de dependencias de archivos y comandos que son necesarios para satisfacerlos.

Se muestra a continuacin un ejemplo de un archivo make:

prog: prog.o f1.o f2.o

gcc -o prog prog.o f1.o f2.o -lm ...

prog.o: cabecera.h prog.c

gcc -c prog.c

f1.o: cabecera.h f1.c

gcc -c f1.c

f2.o: ....

...

La herramienta make lo interpretar de la siguiente forma:

1. prog depende de tres archivos: prog.o, f1.o y f2.o. Si cualquiera de los archivos objeto ha cambiado desde la ltima compilacin los archivos deben ser religados.

2. prog.o depende de 2 archivos, si estos han cambiado prog.o deber ser recompilado. Lo mismo sucede con f1.o y f2.o.

Los ltimos 3 comandos en makefile son llamados reglas explcitas -- ya que los archivos en los comandos son listados por nombre.

Se pueden usar reglas implcitas en makefile para generalizar reglas y hacer ms compacta la escritura.

Si se tiene:

f1.o: f1.c

gcc -c f1.c

f2.o: f2.c

gcc -c f2.c

se puede generalizar a:

.c.o: gcc -c $