Vamos a ver cómo instalar un programa compilándolo en la propia máquina virtual para lograr un mayor rendimiento, es decir, resolución de dependencias. Vamos a hacerlo con el aMSN, por ejemplo.

MAKE

Pasos a seguir:

  • sudo apt-get install build-essentials
  • Descargar el paquete fuente desde http://www.amsn-project.net/download.php

Descarga del paquete fuente de aMSN

  • Descomprimimos (tar -xzvf archivo.tar.gz) y desde la consola de comandos entramos en la carpeta
  • Escribimos ./configure para que compruebe el procesador y las librerías necesarias
  • Si algo falta lo instalamos, y volvemos a lanzar ./configure
  • Una vez que muestre el resumen, ya podemos lanzar el programa aMSN
  • Pero aún así nos metemos en dicha carpeta y escribimos sudo make install, que generará ejecutables y los enlazará al path
  • Por fin podemos lanzarlo

aMSN en ejecución

MAKEFILE

Estructura de un makefile

VARIABLE=valor
VARIABLE=valor
VARIABLE=valor
VARIABLE=valor
# comentario
objetivo: dependencias
     comando
     comando

objetivo: dependencias
     comando
     comando

Un ejemplo

prog.o: prog.c global.h modulo.h
     gcc -c prog.c -o prog.o

modulo.o:modulo.c modulo.h
     gcc -c modulo.c -o modulo.o

programa: modulo.o prog.o biblio.a
     gcc -o programa modulo.o  \
     prog.o biblio.a

No sólo sirve para programas, también para cualquier otra cosa:

manual.dvi: manual.tex
     latex manual.tex

Suponiendo que tenemos estos tres archivos:

  • main.c
  • libreria.h
  • libreria.c

La forma de compilación sería la siguiente:

Diagrama de compilación de los tres archivos

Los objetivos serían lo que extraemos de cada orden, es decir libreria.o, main.o y ejecutable.exe. Las dependencias sería de lo que depende (valga la redundancia) cada compilación: libreria.o depende de libreria.c, main.o de main.c y ejecutable.exe de main.o y libreria.o.

Ahora creamos un nuevo archivo llamado Makefile para hacer el fichero de las dependencias. Tiene que ser con ese nombre literalmente, y no otro. Escribiremos dentro los objetivos y las dependencias de nuestro programa.

Contenido del Makefile

Es decir, el código de los programas queda tal que así:

main.c

Código de main.c

libreria.c

Código de libreria.c

libreria.h

Código de libreria.h

Makefile

Contenido del Makefile final

Con esto conseguimos hacer un código genérico que nos compile cualquier programa, cambiando tan solo su nombre y las líneas que contienen las dependencias.

¡Salud y coding!