PRATIQUE OUTILS 
Ecrire un fichier make
 
Fondation de la compilation de codes sources, make fonctionne avec un fichier de configuration à la syntaxe particulière : makefile. (12/04/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Un fichier make, ou makefile, est un fichier texte définissant les actions à suivre par make pour "construire" une application. make est en effet un utilitaire inclut dans chaque distribution Unix/Linux, et automatisant les processus liés à la transformation d'un fichier source pour le rendre utilisable sur la machine, ou simplement passer un fichier d'une forme à l'autre.

Lorsqu'il est lancé dans un dossier, make recherche par défaut le fichier makefile, qui contient les instructions qu'il doit suivre. Un makefile se montre indispensable dès que la compilation d'un projet se fait à partir de plus d'un fichier. Ainsi, avec des fichiers C (*.c et *.h), un makefile bien conçu se chargera seul de les compiler en fichiers objet (*.o), puis de lier ces fichiers avec les bibliothèques nécessaires pour obtenir l'exécutable attendu.

Un makefile est structuré à l'aide de règles, qui définissent quoi faire, et quand. Une règle consiste en trois arguments : le résultat, les commandes, et les dépendances. Le résultat est le fichier à obtenir pour la règle en cours ; les commandes sont les appels de fonctions nécessaires à la création de notre résultat ; les dépendances, enfin, correspondent aux fichiers ou règles indispensables au bon déroulement de la règle - les pré-requis, en somme. Les habitués de Ant (lire notre article du 10/11/03) et de son fichier build.xml ne manqueront pas de trouver des similitudes entre les deux systèmes...

Cette structure prend la forme suivante :
résultat : dependances
   commandes


Les dépendances se suivent sur une seule ligne, tandis que chaque commande doit commencer par un retour à la ligne et une tabulation. Nous aurons par exemple :

programme.o : programme.c
  gcc -c -Wall programme.c
programme.exe : programme.o
  gcc -o prog programme.o


Un makefile peut également faire usage de variables internes et de commandes externes. Les variables internes, ou variables automatiques, résolvent le problème de répétition des mêmes appels, de redondance, ou simplement d'oublis lors de la modification du makefile.

source = programme.c
objet = programme.o
$(objet) : $(source)
  gcc -c -Wall $(objet)
programme.exe :
  $(objet) gcc -o prog $(objet)


Parmi les variables automatiques, on trouve $@ pour le nom du résultat, ou $< pour le nom de la première dépendance, $^ pour toutes les dépendances...

Des commandes externes peuvent enfin être appelées depuis un makefile. Le plus souvent, on s'en sert pour préparer un répertoire, ou pour le nettoyer après la compilation des sources - effacer les fichiers inutiles, par exemple. On déclare la règle comme étant phony, fausse, sans quoi make chercherait à créer un fichier, puis on appelle la commande :

.PHONY : nettoyage
nettoyage:
  -rm $(objet)
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page