Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1304 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Makefile] comment générer dynamiquement les dépendances

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Makefile] comment générer dynamiquement les dépendances

n°367204
Taz
bisounours-codeur
Posté le 19-04-2003 à 16:08:06  profilanswer
 

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?  :jap:

mood
Publicité
Posté le 19-04-2003 à 16:08:06  profilanswer
 

n°367400
Taz
bisounours-codeur
Posté le 19-04-2003 à 23:51:14  profilanswer
 

UP!

n°367753
ceyquem
E falso sequitur quodlibet
Posté le 21-04-2003 à 16:07:36  profilanswer
 

voici mon makefile de mon projet (cf code dans le topic que je viens de faire remonter) :
 


all : main clean
 
main : main.o lire.o ecrire.o boolean.h divers.h
        gcc -g main.o lire.o ecrire.o -o indexit
 
main.o : main.c lire.h boolean.h divers.h  
        gcc -g -c main.c
 
ecrire.o : ecrire.c ecrire.h boolean.h divers.h
        gcc -g -c ecrire.c  
 
lire.o : lire.c lire.h boolean.h divers.h
        gcc -g -c lire.c
 
clean : main
        rm *.o
 


 
les premières et dernières lignes sont facultatives, elles servent juste à effacer les fichiers intermédiaires du compilateur.


Message édité par ceyquem le 21-04-2003 à 16:09:57
n°367760
Taz
bisounours-codeur
Posté le 21-04-2003 à 16:14:05  profilanswer
 

:heink: 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

n°367775
kadreg
profil: Utilisateur
Posté le 21-04-2003 à 16:38:15  profilanswer
 

je [:drapo], je suis également interressé par le mécanisme


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°367865
slvn
Posté le 21-04-2003 à 19:46:57  profilanswer
 

voici ce que j utilise :)
 

Code :
  1. Serveur: Serveur.o Affichage.o CalculateurGeneral.o SimulateurLocal.o Ascenseur.o List/List.o Common.o
  2. $(CC) $(DIR) $+ -o $@
  3. %.o: %.c Header.h
  4. $(CC) $(DIR) -c $< -o $@

n°367871
kadreg
profil: Utilisateur
Posté le 21-04-2003 à 19:50:55  profilanswer
 

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.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°367879
slvn
Posté le 21-04-2003 à 20:01:54  profilanswer
 

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

n°367927
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 21-04-2003 à 21:14:48  profilanswer
 

++Taz a écrit :


quelqu'un à un Makefile déjà tout pret à me montrer?  :jap:  


 
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
        source='./plop.C' object='plop.o' libtool=no \
depfile='.deps/plop.Plo' tmpdepfile='.deps/plop.TPlo' \
depmode=gcc3 /bin/sh depcomp \
g++ -c plop.C -o plop.o
 
include .deps/plop.Plo

 
 
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.

n°367932
Taz
bisounours-codeur
Posté le 21-04-2003 à 21:21:53  profilanswer
 

:sweat: y a vraiment personne qui sait comment récupérer simplement des tas de  
truc.o : truc.c dawa. h .... machin.h
 
???
 
edit: typo


Message édité par Taz le 21-04-2003 à 21:51:57
mood
Publicité
Posté le 21-04-2003 à 21:21:53  profilanswer
 

n°367983
slvn
Posté le 21-04-2003 à 21:49:00  profilanswer
 

je capte pas bien tes dependance...
un .o ne depend aue d un seul .c et eventullement de plusieurs .h

n°367985
Taz
bisounours-codeur
Posté le 21-04-2003 à 21:52:11  profilanswer
 

Slvn a écrit :

je capte pas bien tes dependance...
un .o ne depend aue d un seul .c et eventullement de plusieurs .h

edit   [:tomtom75]

n°367993
slvn
Posté le 21-04-2003 à 21:56:46  profilanswer
 

yep, on est d accord,  
bah utilse la regle que j ai mise plus haut...

n°367996
Taz
bisounours-codeur
Posté le 21-04-2003 à 21:58:37  profilanswer
 

Slvn a écrit :

yep, on est d accord,  
bah utilse la regle que j ai mise plus haut...

:non:. 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


Message édité par Taz le 21-04-2003 à 22:01:00
n°368016
slvn
Posté le 21-04-2003 à 22:14:40  profilanswer
 

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.
 

n°368017
Taz
bisounours-codeur
Posté le 21-04-2003 à 22:15:40  profilanswer
 

ben non on s'en fout pas. si les headers changent, la cible doit etre reconstruite


Message édité par Taz le 21-04-2003 à 22:15:57
n°368034
schnapsman​n
Zaford Beeblefect
Posté le 21-04-2003 à 22:29:13  profilanswer
 

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.


Message édité par schnapsmann le 21-04-2003 à 22:29:49

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°368035
Taz
bisounours-codeur
Posté le 21-04-2003 à 22:30:09  profilanswer
 

ben je check

n°368054
slvn
Posté le 21-04-2003 à 22:50:48  profilanswer
 

yep c est vria quand les header change au temps pour moi :)
 
en fait il faut le mettre la :
 

Code :
  1. Serveur: Serveur.o Affichage.o CalculateurGeneral.o SimulateurLocal.o Ascenseur.o List/List.o Common.o
  2.    $(CC) $(DIR) $+ -o $@
  3.  
  4.   %.o: %.c Header.h Hedar2.h autreheader.h etc,
  5.    $(CC) $(DIR) -c $< -o $@

n°368058
Taz
bisounours-codeur
Posté le 21-04-2003 à 22:54:44  profilanswer
 

toi t'as vraiment rien compris   [:tomtom75]  
 
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.

n°368064
nraynaud
lol
Posté le 21-04-2003 à 23:02:25  profilanswer
 

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é.

n°368066
slvn
Posté le 21-04-2003 à 23:09:30  profilanswer
 

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.
 

n°368069
schnapsman​n
Zaford Beeblefect
Posté le 21-04-2003 à 23:17:40  profilanswer
 

Slvn a écrit :

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.
 
 


 
 [:fear] c'est quoi ce post


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°369997
schnapsman​n
Zaford Beeblefect
Posté le 23-04-2003 à 23:13:41  profilanswer
 

http://www.delorie.com/gnu/docs/make/make_43.html
 
je retombe la dessus par hasard :pfff:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Makefile] comment générer dynamiquement les dépendances

 

Sujets relatifs
Generer un XML super newbie inside[makefile] constantes de compilation
[PHP] temps minimal pour generer un cookie[PHP] Generer de l'ascii art
Récupération de champs d'un formulaire créé dynamiquement [Javascript] C'est possible de nommer dynamiquement des variables ?
[HTML,PHP] Les balises select peuvent elle etre remplies dynamiquementgénérer pages statiques depuis les pages faites par PHP
generer du pdf a partir d'xml?[SQL] generer un script de sauvegarde en .sql
Plus de sujets relatifs à : [Makefile] comment générer dynamiquement les dépendances


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR