viernes, febrero 15, 2008

make fun

Mis primeros pasos programando los di en Lenguaje C y una de las cosas que me gustó mucho cuando cambié a GNU/Linux fueron los makefiles y lo más divertido es que casi, sino es que todos, los compiladores pueden hacer uso de estos archivos.

El proceso de compilacion puede ser muy tedioso y propenso a errores. De igual manera, los programas muy grandes puede constar de muchos módulos y son extremadamente difíciles de compilar a mano. Afortunadamente,UNIX (GNU/Linux) y MS-DOS/Windows tienen una herramienta llamada make (nmake en el caso de M$ Visual C++) que maneja los detalles de la
compilación. Make, busca en un archivo llamado: makefile la descripción de como compilar nuestro programa y ejecuta el compilador por nosotros.

Debido a que el makefile contiene las reglas para la compilación, este debe personalizarse para el compilador que estemos utilizando.

El makefile contiene las siguientes secciones:

- Comentarios
- Macros
- Reglas Explicitas
- Reglas Predeterminadas

Cualquier linea que comienza con el signo # es un comentario.

Una macro tiene el formato:

nombre = valor


donde nombre es cualquier identificador válido y valor es el texto que será sustituido cuando make vea $(nombre).

Por ejemplo:

#
# Makefile muy simple
#
MACRO = Doing All
all:
echo $(MACRO)


Las reglas explicitas le indican a make que comandos son necesarios para crear el programa. La forma más común para estas es:

destino: origen [origen2] [origen3]
comando
[comando]
[comando] ...


donde destino es el nombre de una archivo a crear. Este archivo es creado a partir del archivo fuente origen. Si el destino es creado a partir de múltiples archivos, todos ellos son listados. Esta lista debe incluir todos los ficheros de cabezera incluidos por el archivo fuente. El comando que genera el destino se especifica en la siguiente línea. Algunas veces necesitamos más de un comando para crear el destino. Los comandos se listan uno por línea y cada uno se encuentra identado por un tab (si un tab, ocho espacios no funcionarán :-/ ).

Por ejemplo, la regla:

hola: hola.c
gcc -g -ohola hola.c


le indica a make que cree el archivo hola a partir del archivo hola.c utilizando el comando:

gcc -g -ohola hola.c


make creará hola solamente si es necesario.

Make ofrece un conjunto extenso de comandos para la creación de programas. Para mayores detalles consulta las paginas del manual de make.

make fun ;-)

No hay comentarios: