sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
12 janv. 2010 à 11:24
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
12 janv. 2010 à 15:53
Bonjour,
Une petite question sur le compilateur g++.
J'ai une classe (dans un couple .cc et .h) qui utilise un tableau de taille 100 défini dans le fichier header. J'ai ensuite un main.cc pour tester cette classe. Dans ce main.cc, on trouve un "include<maclasse.h>".
Je fais un "make", et je récupère donc, en plus de l'exécutable, un main.o et et un "maclasse.o". Or si je modifie la taille du tableau dans le "maclasse.h" (je la passe à 1000), le make ne recompile pas le "main.o", ce qui donne une erreur de segmentation (le main conserve le tableau à 100).
D'où ma question :
Existe-t-il un paramètre de g++ pour forcer la vérification des inclusions et recompiler le .cc si besoin ? (là, ça va parce que je n'ai que deux fichiers...)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 12 janv. 2010 à 11:36
(dans un couple .cc et .h)
En C++, on utilise .cc/.hh ou .cpp/.hpp, le .h étant réservé au C.
include<maclasse.h>
J'aurais plutôt utilisé #include "maclasse.h".
Existe-t-il un paramètre de g++ pour forcer la vérification des inclusions et recompiler le .cc si besoin ? (là, ça va parce que je n'ai que deux fichiers...)
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 12 janv. 2010 à 15:39
Merci pour tes réponses.
concernant les extensions, je suis les consignes de mes profs, désolé... maintenant, si tu me dis que c'est ce qui se fait, je corrigerai.
include<maclasse.h> car j'ai fait une arborescence avec les sources dans "src", les includes dans "include" et un -I à la compilation.
J'ai regardé ton source, malheureusement, je n'ai pas tout compris, n'ayant jamais rencontré de fichiers configure ou makefile.deps. Aurais-tu un petit tuto à me proposer ?
Question subsidiaire : qu'est-ce que le makefile.rules ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 12 janv. 2010 à 15:53
include<maclasse.h> car j'ai fait une arborescence avec les sources dans "src", les includes dans "include" et un -I à la compilation.
Je n'avais pas le contexte. C'est dans ce cas tout à fait correcte.
J'ai regardé ton source, malheureusement, je n'ai pas tout compris, n'ayant jamais rencontré de fichiers configure ou makefile.deps. Aurais-tu un petit tuto à me proposer ?
Ok, alors pour t'expliquer brievement:
Soit le fichier toto.cc qui dépend de plusieurs fichiers .hh (ou .h), si tu tapes:
g++ -MM toto.cc
Il te réponds:
toto.o: toto.cc toto.hh truc.hh
Ce qui est exactement le format d'une règle de Makefile ! (Ce n'est pas un hasard :p).
Donc tu fais ton Makefile, comme d'habitude, et tu ajoutes l'ensemble
Question subsidiaire : qu'est-ce que le makefile.rules ?
C'est un fichier créer par le configure, et qui est inclut par le Makefile. Ca permet d'inclure une série de variables, de manière dynamique. Si tu n'as pas de configure, alors tu as forcément des variables au début de ton fichier Makefile.
makefile.deps
Ce type de fichier est construit à chaque compilation. On stocke dedans l'ensemble des dépendances (notamment les headers) obtenues par -MM, que l'on inclut directement dans le Makefile, car le format généré est compatible (voir explication du -MM).
Si tu ne veux pas te faire chier, tu peux aussi ajouter les headers en dépendances des .o associés, ça fonctionnera. Mais c'est moins robuste que cette technique, qui génère ceci pour toi.
Dans le projet que je t'ai filé, regarde:
- configure
- Makefile
- src/Makefile
C'est très générique, puisqu'il ne faut modifier que la liste des .cc et .hh du src/Makefile, quelque soit le projet (Tu devras juste ajouter un -I pour ton cas).
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]