Partenaires

CNRS IN2P3
UPMC
UPD
UPMC


Rechercher

Sur ce site

Sur le Web du CNRS


Accueil du site > Le LPNHE > Pages du personnel > Beau Tristan > Divers > Vielleries > makefile et recherche de dépendances

makefile et recherche de dépendances

7 octobre 2005

par Tristan Beau - 18 mai

Je vous propose ci-dessous un makefile très générique qui recherche automatiquement les dépendances des différents fichiers sources entre eux, afin d’éviter une écriture fastidieuse voire erronnée du makefile.

Les répertoires de travail pour les fichiers include ou sources sont définis en tête du fichier makefile dans $(SRCDIR) et $(INCDIR). Les binaires objets et exécutables se placeront dans $(OBJDIR), $(OBMDIR) (pour les .o avec un main) et $(BINDIR). Si ces répertoires n’existent pas, ils seront créés. Les extensions attendus pour chaque type de fichier sont définies aussi dans le fichier makefile.

La compilation est ici machine dépendante, assurant la transmission de flags aux sources pour tester la machine sur laquelle la compilation est effectuée (option -D). Usuellement, la variable d’environnement $(SYSTEM) est déjà prédéfinie ; si ce n’est pas le cas, on l’ajoutera au variables d’environnement, soit par exemple :

Le principal intérêt de ce makefile est la détermination automatique des dépendances des sources aux fichiers headers. Celà passe par l’utilisation de l’option -MM donnée au compilateur qui n’exécute que le préprocesseur et lui demande de trouver les dépendances utilisateurs.

Enfin, si les sources sont attendus dans $(SRCDIR), le main est attendu dans le répertoire en cours (c’est a priori le seul fichier utilisateur dans la racine du répertoire de travail). Si plusieurs fichiers source dans cette racine ont un main, il y aura dans $(BINDIR) autant de fichiers exécutables.

Nota : Le makefile ci-dessous suppose l’utilisation du GNU Make. Sur une machine Sun par exemple, le make standard ne fonctionnera pas.

Dernier point. Lorsque vous faites une erreur de nom lors de l’inclusion d’un fichier (commande #include), une erreur est créée dans les fichiers de dependances. Il faut alors les effacer avec

voire éventuellement pour effacer tous les fichiers objets et les dépendances :

Voici donc la source de ce makefile. Notez qu’on suppose l’utilisation du logiciel root dans ce makefile ; si vous ne l’utilisez pas, supprimer les lignes qui y font référence.

Si vous faites du copier - coller à la souris du fichier ci-dessous, faites attention à ce que les tabulations soient bien prises en compte...

Facebook