Bonjours,
Voici mon dernier petit problème.![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
Je suis sous un projet C++, avec pas mal de dossier.
Pour compiler le tout j'utilise un makefile qui gère le tout, dont les dépendances
Pour ceux qui ne savent pas ce c'est:
Les dépendances sont des règles qui permettent dire au makefile de recompiler le
fichier sources (*.c) si un de ces header (*.h) est mise a jours.
Il y a deux manière de procéder:
- Utiliser makedepend, qui est une fonction intégré au makefile
mais cette solution n'est pas très générique, et pas compatible avec tout les système d'exploitation. Je l'ai essayer et ca fonction , mais je ne veux pas celui la
![:P](https://www.developpez.net/forums/images/smilies/icon_razz.gif)
- Utiliser les option du compilateur gcc avec les option: -MM -M -MD -MF -MT ect..
Ici aussi, tout marche bien grâce a la ligne de code
%.d: %$(SRC_EXT)
g++ -MM -MP -MF"$@" -MT"$(@:%.d=%.o)" -c $<
Explication:
-MM = permet de générer les dépendances et ignorer les fichier système
-MF = precise le mon du fichier ou seront écrite les dépendances (Ex: main.d)
-c $< = precise le fichier source a analyser (Ex: main.c)
Le problème vient après. Pour ne pas m'amuser a inclure chaque headers (*.h) de la manière suivante
#include "../../../Graph/Types/Tools/toto.h"
Je créer un lien symbolique (une sorte de raccourci) pour chaque header, et je les met tous dans un seul dossier appelé "include" que j'inclue a la compilation grâce a l'opiton -I
%.o: %c %.d
g++ -o $@ -c $< -w -I../include
Explication:
-o $@ = précise le fichier de sortie.
-c = précise qu'il faut qu'il créés des objets(*.o)
-I../include = inclusion des header du dossier "../include"
Ce qui me permet d'appeler tout mes header(*.h) comme une librairie standard
Le problème, c'est que mais dépendance ignore les librairie standard
Je c'est qu'avec makedepend, j'arrivais a surmonter ce problème, mais avec gcc ![:bug:](https://www.developpez.net/forums/images/smilies/icon_bug.gif)
Je me suis renseigner, et j'ai vue que la version de gcc 3.0 faisait la différence, sans prendre en compte le type d'appel (type1 :#include "toto.h",type2 :#include <toto.h> )
Help
Je continue a chercher
Partager