Menu
Rechercher
Accueil > Le LPNHE > Pages du personnel permanent > Beau Tristan > Divers > Vielleries > makefile et recherche de dépendances
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...
Dans la même rubrique :
- tutoriel rapide matlab 5
- thèse sur Borexino
- anti-spam et imap
- permutations et appel récursif
- format non trivial pour les nombres en c++
- Sommer des champs dans un fichier
- vim et ses folles astuces
- aide minimale emacs
- pointeur de fonction
- fork, ou comment créer des processus fils en C
- rediriger la sortie standard de Minuit
- makefile pour ferme hétérogène de calcul (tel qu’au ccin2p3)
- les énumérations en C
- publications et communications
- code ascii d’un caractère
- rapports et communications internes
- calcul d’histogramme
- test d’argument numérique entier
- calculs sur nombres flottants en shell
- créer un pdf récapitulant les logins d’une machine
- indications sur le sujet d’examen d’UNIX-1...
- lister en C le contenu d’un répertoire
- contrôle des processus fils créés par fork()
- variables globales (extern) et commandes du préprocesseur
- Programme d’orchestre au tuba...
- Léopard : installation de l’OS et packages divers
- Mountain Lion : une configuration personnelle
- Soucis avec Yosemite ( MacOS 10.10 )
- CV - très vieille version