comment générer dynamiquement les dépendances [Makefile] - C++ - Programmation
Marsh Posté le 21-04-2003 à 16:07:36
voici mon makefile de mon projet (cf code dans le topic que je viens de faire remonter) :
|
les premières et dernières lignes sont facultatives, elles servent juste à effacer les fichiers intermédiaires du compilateur.
Marsh Posté le 21-04-2003 à 16:14:05
je crois que t'as pas compris, je parle de faire des Makefile autrement plus compliqué que le tien.
le tien est le Makefile de base: écriture explicite de toutes les règles, de toutes les cibles, aucun symbols, etc. Je crois que t'as pas le niveau en ce qui concerne les Makefile.
BTW, ton Makefile est bizarre: pour nettoyer, il faut d'abord tout construire. Super ton flag g, mais tu pense qu'il serait bien d'afficher quelque warning à la compilation, plutot que d'essayer de resoudre les erreurs en debuggant?
dans tous les cas -Wall -Wshadow
si C ANSI -ansi -pedantic
si C99 -std=c99
Marsh Posté le 21-04-2003 à 16:38:15
je , je suis également interressé par le mécanisme
Marsh Posté le 21-04-2003 à 19:46:57
voici ce que j utilise
Code :
|
Marsh Posté le 21-04-2003 à 19:50:55
Slvn a écrit : voici ce que j utilise |
Mais ça sous-entend que tout fichier .cpp ne dépend que d'un seul gros fichier .h. Si c'est utilisable pour un petit projet, je me vois pas faire ça sur un gros machin.
Marsh Posté le 21-04-2003 à 20:01:54
bah c le principe, un fichier ne depends que de son header, et eventuelle;ent d un header plus general/
je vois pas ton pb en fait, t aurais voulu mettre quoi comme ligne
Marsh Posté le 21-04-2003 à 21:14:48
++Taz a écrit : |
A l'ancienne: man makedepend (ce qui est chiant c'est que ce programme fait partie de X11)
A la gnu: avec autofuck.. tu peux aussi récuperer le script depcomp qui fait partie d'automake, l'avantage c'est qu'il sait générer les dependances avec un certain nombre de compilateurs:
plop.o: plop.C |
bien sûr faut avoir un plop.Plo vide le premier coup, et les dépendances utilisées par make sont toujours celles de la compil précedente. mais comme c'est ce qu'utilise automake je pense qu'il n'y a pas de meilleure solution à base de makefiles.
Marsh Posté le 21-04-2003 à 21:21:53
y a vraiment personne qui sait comment récupérer simplement des tas de
truc.o : truc.c dawa. h .... machin.h
???
edit: typo
Marsh Posté le 21-04-2003 à 21:49:00
je capte pas bien tes dependance...
un .o ne depend aue d un seul .c et eventullement de plusieurs .h
Marsh Posté le 21-04-2003 à 21:52:11
Slvn a écrit : je capte pas bien tes dependance... |
edit
Marsh Posté le 21-04-2003 à 21:56:46
yep, on est d accord,
bah utilse la regle que j ai mise plus haut...
Marsh Posté le 21-04-2003 à 21:58:37
Slvn a écrit : yep, on est d accord, |
. edit je vois pas ou t'as vu qu'un fichier ne dépendé que de son header associé, ou alors c'est que tu positionne mal tes #include
Marsh Posté le 21-04-2003 à 22:14:40
les headers on s en fout dnas le make file je pense
=> t as aucun traitement a faire, et si y en a vraiment besoin, GCC te le dira
(pas entiermeent vrai, y a tjrs moyen de contre dire ce que je dis)
si tu veux qq chose de generique, faut que l architecture de ton programme soit generique elle aussi pour faire qq chose de general.
Marsh Posté le 21-04-2003 à 22:15:40
ben non on s'en fout pas. si les headers changent, la cible doit etre reconstruite
Marsh Posté le 21-04-2003 à 22:29:13
Pour chaque cible ".o", il faut générer un fichier ".d" en utilisant l'option ad hoc du compilo utilisé.
Avec gnu make, il est possible de foutre un fichier .d dans la partie dépendance d'une règle... et donc quand gmake vérifie les dépendances il examine tous les headers effectivement inclus dans le source.
Exemple : kernel linux, cf make dep.
Marsh Posté le 21-04-2003 à 22:50:48
yep c est vria quand les header change au temps pour moi
en fait il faut le mettre la :
Code :
|
Marsh Posté le 21-04-2003 à 22:54:44
toi t'as vraiment rien compris
une regle
%.o : %.c
sera toujours utiliser par défaut si aucune autre n'est trouvé, c'est à dire que si tu as la cible
truc.o: truc.c truc.h dawa.h
c'est cette reglèe qui est utilisé.
pour avoir toutes les regles, il suffit de faire gcc -MM et de copier ces regles dans son Makefile. le but de ce topic, c'est d'automatiser ce traitement.
Marsh Posté le 21-04-2003 à 23:02:25
Dans le manuel de gmake (le gros truc en LaTeX), ils utilisent (et conseillent) un truc à base de gcc -M | sed ungrosScriptQuiTue > unMakefilePartielParCible
et ils incluent tous les makefiles dans le gros makefile.
Je l'ai utilisé mais que en copier-coller-adapté.
Marsh Posté le 21-04-2003 à 23:09:30
ok, connaissait pas gcc -MM,
mains ca l air 'dangereux de faire ca...
si ton projet est divise en module, tu fais des includes des makefile de chaque module...mais pas un truc tout autatise sans aucune structure.
Marsh Posté le 21-04-2003 à 23:17:40
Slvn a écrit : ok, connaissait pas gcc -MM, |
c'est quoi ce post
Marsh Posté le 23-04-2003 à 23:13:41
http://www.delorie.com/gnu/docs/make/make_43.html
je retombe la dessus par hasard
Marsh Posté le 19-04-2003 à 16:08:06
c'est bien cool, gcc -MM, mais comment qu'on fait pour que ça se fasse tout seul. J'ai la flemme de lire le man de make, mais je me doute qu'il doit suffire de rediriger le résultat de gcc -MM dans un fichier et apres de l'inclure dans le Makefile (doit bien y a voir une commande pour rajouter des regles dynamiquements.
quelqu'un à un Makefile déjà tout pret à me montrer?