IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres éditeurs Discussion :

Problème pour générer les dépendances


Sujet :

Autres éditeurs

  1. #1
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut Problème pour générer les dépendances
    Bonjour,
    j'ai un problème pour générer les dépendances.
    J'utilise :
    g++ -MM src/*.cpp
    Et ça me produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Video.o : src/Video.hpp ...
    Je voudrais que çà produise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src/Video.o : src/Video.hpp
    Car en fait lorsque je modifie un fichier ça ne recompile pas tout du fait que mes .o ne sont pas dans le répertoire courant.
    J'ai bien fait un man gcc, mais je n'ai rien trouvé.
    Je voudrais aussi savoir s'il est possible que la génération des dépendances me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj/Video.o : src/Video.hpp ...
    Comme ça tous mes .o se trouve dans obj/ et plus dans les répertoires sources.

    D'avance merci.
    b Oo

  2. #2
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Voici mon Makefile :
    - mes sources sont dans src
    - mes objets dans Obj
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #*********************************************************************
    #Makefile
    #
    #  Damien R. 
    #*********************************************************************
     
     
    #compilateur
    DEBUG=yes
    ifeq ($(DEBUG),yes)
    	CFLAGS=-Wall -pedantic -ansi -g -D_GLIBCXX_FORCE_NEW
    	LDFLAGS=-Wall -pedantic -ansi -lcppunit -g -D_GLIBCXX_FORCE_NEW -ldl -lstdc++
    else
    	CFLAGS=-Wall -pedantic -ansi
    	LDFLAGS=-Wall -pedantic -ansi -lcppunit -ldl -lstdc++
    endif
     
    CC=g++
     
    #liste de tous les executables produits
    EXEC=test
     
    SRCDIR=/home/dam/Programmation/Labo/Make/src/
     
    OBJDIR=/home/dam/Programmation/Labo/Make/Obj/
     
    #liste des fichiers sources
    SRC=$(wildcard $(SRCDIR)*.cpp) $(wildcard $(SRCDIR)util/ *.cpp) # j'ai rajouté un espace pour pas que ce soit mis en commentaire
     
    #liste des objets crees
    OBJ=$(addprefix $(OBJDIR), $(notdir $(SRC:.cpp=.o)))
     
    #pour qu'il recherche mes .cpp dans SRCDIR ; 1er probleme ne prend pas les repertoires en dessous
    vpath %.cpp = $(SRCDIR):$(SRCDIR)/util/
     
    all:$(EXEC)
     
    #$^ = liste de tous les objets contenu dans OBJ
    $(EXEC):$(OBJ)
    	$(CC) -o $@ $^ $(LDFLAGS)
     
    #compile toutes les .cpp
    #$@ = nom de la cible (toto.o)
    #$< = nom du fichier que l'on compile (toto.cpp)
    $(OBJDIR)%.o:%.cpp
    	$(CC) -o $@ -c $< $(CFLAGS)
     
    #pour pas avoir de problemes si un fichier clean ou mrproper existe
    .PHONY: clean mrproper dep
     
    clean:
    	rm -rf $(OBJ)
     
    mrproper: clean
    	rm -rf $(EXEC)
     
    dep:
    	mymakedep -- $(CFLAGS) -- $(SRC) # 2eme pb me genere mes fichiers toto.o au lieu de $(OBJDIR)/toto.o
     
     
    #on indique les dependances
    # DO NOT DELETE
    /home/dam/Programmation/Labo/Make/Obj/main.o: /home/dam/Programmation/Labo/Make/src/main.cpp \
      /home/dam/Programmation/Labo/Make/src/Test.hpp
    /home/dam/Programmation/Labo/Make/Obj/Test.o: /home/dam/Programmation/Labo/Make/src/Test.cpp \
      /home/dam/Programmation/Labo/Make/src/Test.hpp
    /home/dam/Programmation/Labo/Make/Obj/Util.o: /home/dam/Programmation/Labo/Make/src/util/Util.cpp \
      /home/dam/Programmation/Labo/Make/src/util/Util.hpp
    J'ai deux problèmes :
    - je suis obligé d'indiquer tous les répertoires dans vpath pour qu'il trouve les cpp
    - mymakedep me renvoie les règles comme ceci :
    et moi je voudrais :
    La je dois pouvoir le régler en changeant le script de mymakedep (c'est juste ccmakedep avec g++ -MM au lieu de g++ -M), mais il y a peut-être une option dans gcc que je n'ai pas vu)

    Donc si quelqu'un à la solution, et un makefile plus "propre", car le
    n'est pas top, mais un %.o avec vpath %.o = $(OBJDIR) ne marchait pas (si quelqu'un peut me dire pourquoi).

    Merci.
    b Oo

  3. #3
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Pour avoir ma liste de dépendances, je rajoute ceci dans dep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dep:
    	mymakedep -- $(CFLAGS) -- $(SRC)
    	sed -ie 's/\(\<[a-Z]*\.o: \)/$(subst /,\/,$(OBJDIR))\1/g' Makefile
    J'explique vite fait, \< est pour dire que c'est un début de mot (pour éviter de me remplacer le motif dans la commande elle-même). Le -i c'est pour dire que cela s'applique sur le fichier ici, Makefile, et le -e c'est pour le script.
    Après rien de bien sorcier, c'est les expressions régulières.

    Si quelqu'un veut une explication plus détaillée, il faudra demander.

    Je mettrai résolu bientôt, j'attends de voir s'il y a des commentaires.
    b Oo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  2. problème avec idlj pour générer les stubs
    Par merlubreizh dans le forum CORBA
    Réponses: 2
    Dernier message: 25/02/2007, 10h29
  3. Réponses: 1
    Dernier message: 17/05/2004, 11h29
  4. Un outil pour evaluer les dépendances
    Par karbone dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 30/03/2004, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo