# GNU Automake

GNU Automake es una herramienta de programación que produce programas makefiles portables para el uso de make usado en la compilación de software. Es mantenido por la Fundación de Software Libre como uno de los programas GNU y es parte del sistema de construcción para GNU. El archivo Makefile generado sigue la directiva estándar de codificación GNU.
Está escrita con el lenguaje de programación Perl y debe ser usado con GNU autoconf. Automake contiene los siguientes comandos:
* aclocal
* automake
Sin embargo aclocal es un programa de uso general que puede ser usado por los usuarios de autoconf. La Colección de compiladores GNU usa aclocal aunque sus archivos makefile están escritos a mano.
Al igual que Autoconf, Automake puede ser difícil de utilizar porque no es completamente compatible con versiones anteriores. Por ejemplo, un proyecto creado con la versión 1.4 no tiene porque ser compatible con la 1.9.

## Introducción

Automake intenta que el programador pueda escribir un archivo makefile en un lenguaje de alto nivel en vez de tener que escribir todo el makefile manualmente. En los casos simples es suficiente con dar:
* una línea que declare el nombre del programa a construir;
* una lista de archivos fuente;
* una lista de opciones para pasar al compilador (los directorios donde localizar los archivos de cabecera);
* una lista de opciones para pasar al enlazador (las bibliotecas que necesita el programa y en qué directorios se encuentran).
Con esta información Automake genera un archivo makefile que permite que el usuario pueda:
* compilar el programa;
* limpiar (eliminar los archivos resultantes de la compilación);
* instalar el programa en los directorios estándar;
* desinstalar el programa donde se haya instalado;
* crear un archivo fuente de distribución (comúnmente llamado tarball);
* comprobar que el archivo es autosuficiente y en concreto que el programa puede ser compilado en un directorio diferente al que se descomprimió los fuentes.
Automake también tiene cuidado de generar la información de dependencias; así como cuándo se ha modificado un archivo fuente. La siguiente invocación del comando make sabrá qué archivos fuente se van a recompilar. Si el compilador lo permite automake intentará hacer un sistema de dependencias dinámico. Cada vez que un archivo fuente es compilado las dependencias del archivo son actualizadas. Para ello pregunta al compilador la lista de dependencias de ese archivo. En otras palabras, el seguimiento de dependencias es un efecto secundario del proceso de compilación.
Esto intenta evitar los problemas con algunos sistemas de dependencia estáticos en los que las dependencias solo son detectadas cuando el programador empieza a trabajar en un proyecto. En tal caso si un archivo fuente tiene una nueva dependencia (si el programador añade una nueva directiva #include en el archivo fuente en C se añade una discrepancia entre las dependencias reales y aquellas que son usadas por el sistema de compilación. El programador debe regenerar las dependencias pero corre el riesgo de olvidar hacerlo.
Automake también puede ayudar en la compilación de bibliotecas generando automáticamente archivos makefile que invocarán la herramienta GNU Libtool. El programador no necesita conocer como llamar directamente a Libtool y el beneficio de usar una utilidad de creación de bibliotecas portable.