# GNU Automake

GNU Automake est un logiciel générant des makefiles portables qui peuvent être utilisés par make pour compiler des programmes. C'est un logiciel libre développé et maintenu par le projet GNU et utilisé dans le processus de compilation du système GNU. Les makefiles produits se conforment aux normes de programmation de GNU.
Automake est écrit en Perl et doit être utilisé avec Autoconf, un autre outil GNU. Il contient les commandes suivantes :
* aclocal ;
* automake.
Automake peut présenter des difficultés à cause du fait que les versions récentes ne sont pas compatibles avec les plus anciennes. Par exemple, un projet créé avec Automake 1.4 ne fonctionnera pas avec Automake 1.9.

## Approche

Automake vise à permettre au programmeur d'écrire un makefile dans un langage de plus haut niveau, plutôt que d'avoir à écrire le makefile au complet à la main. Dans les cas simples, il suffit de donner :
* une ligne qui déclare le nom du programme à compiler ;
* une liste de fichiers sources ;
* une liste d'options à passer au compilateur (notamment, dans quels répertoires les en-têtes seront trouvés) ;
* une liste d'options à passer à l'éditeur de liens (de quelles bibliothèques le programme a besoin et dans quels répertoires elles se trouvent).
À partir de cette information, Automake génère un makefile qui permet à l'usager de :
* compiler le programme ;
* nettoyer (supprimer les fichiers produits par la compilation) ;
* installer le programme dans les répertoires prévus par les normes GNU ;
* désinstaller le programme des répertoires où il a été installé ;
* créer une archive de distribution des sources (souvent appelée tarball en anglais) ;
* vérifier que cette archive est auto-suffisante, et en particulier qu'il est possible de compiler le programme dans un répertoire autre que celui où les sources sont déployées) ;
Automake s'occupe aussi de générer automatiquement les informations de dépendances, afin que lorsqu'un fichier source est modifié, la prochaine invocation de la commande make sache quels fichiers sources ont besoin d'être recompilés en conséquence. Si le compilateur le permet, Automake tente de rendre le système de dépendances dynamique : chaque fois qu'un fichier source est compilé, les dépendances de ce fichier sont mises à jour en demandant au compilateur de régénérer la liste des dépendances de ce fichier. Autrement dit, la gestion des dépendances est un effet de bord du processus de compilation.
Ceci tente d'éviter le problème avec certains systèmes de dépendances statiques où les dépendances ne sont détectées qu'une seule fois quand le programmeur commence à travailler sur un projet. Dans un tel cas, si un fichier source acquiert une nouvelle dépendance (par exemple, si on ajoute une directive #include à un fichier source en C), une disparité apparaît alors entre les vraies dépendances et celles qui sont utilisées par le système de compilation. Le programmeur devrait alors régénérer les dépendances, mais il risque d'oublier de le faire.
Automake facilite aussi la compilation de bibliothèques en générant automatiquement des makefiles qui invoquent GNU Libtool. Le programmeur est alors exempté d'avoir à utiliser Libtool directement et le projet bénéficie d'un outil capable de créer des bibliothèques de façon portable.