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

Systèmes de compilation Discussion :

Makefile : fichiers dans différents dossiers + CppUnit


Sujet :

Systèmes de compilation

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Makefile : fichiers dans différents dossiers + CppUnit
    Bonjour à tous,

    J'aimerais créer un Makefile compilant des fichiers dans différents dossiers et créer 2 exécutables :
    un pour le programme principal
    un pour les tests unitaires menés avec CppUnit.

    J'ai les dossiers suivants :
    src : pour les sources
    src_test : pour les sources de cppunit
    bin : pour les exécutables
    lib : endroits où seront crées les .o

    J'ai réalisé un Makefile le plus compréhensible possible :

    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
     
    #Makefile
     
    CPP=g++
    CFLAGS = -I$(HEADDIR) -g -Wall -pedantic -Os
    LDLIBS = -lcppunit
    GLLIBS = GLLIBS = -ltiff -framework OPENGL -framework GLUT -framework GLUI -lobjc -lstdc++ -lm
     
    EXEC = Projet
    EXECTEST = TestsUnitaires
     
     
    BINDIR = bin
    SRCDIR = src
    LIBDIR = lib
    HEADDIR = src
    SRCTESTDIR = src_test
     
     
    SOURCES = $(wildcard $(SRCDIR)/*.cpp)
    SOURCESTEST = $(wildcard $(SRCTESTDIR)/*.cpp)
    OBJS = $(SOURCES:$(SRCDIR)/%.cpp=$(LIBDIR)/%.o)
    OBJSTEST = $(SOURCESTEST:$(SRCDIRTEST)/%.cpp=$(LIBDIR)/%.o)
     
     
    all: $(EXEC) $(EXECTEST)
     
     
     
    # Création des exécutables
     
     
     
    Projet: $(OBJS)
    	$(CPP) -o $(BINDIR)/$@ $^ $(CFLAGS) $(GLLIBS) $(LDLIBS)
     
    TestsUnitaires: $(OBJSTEST)
    	$(CPP) -o $(BINDIR)/$@ $^ $(CFLAGS) $(GLLIBS) $(LDLIBS)
     
     
     
    # Création des objets 
     
     
     
    $(LIBDIR)/%.o: $(SRCDIR)/%.cpp $(SRCDIR)/%.h 
    	$(CPP) -o $@ -c $< $(CFLAGS) $(LDLIBS)
     
    $(LIBDIR)/%.o: $(SRCTESTDIR)/%.cpp $(HEADDIR)/%.h
    	$(CPP) -o $@ -c $< $(CFLAGS) $(LDLIBS)
     
     
     
    clean:
    	rm $(LIBDIR)/*.o
    	rm $(BINDIR)/*
    L'erreur issue du make est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    make: *** No rule to make target `lib/Acteur.o', needed by `Projet'.  Stop.
    Acteur.cpp de mon projet une classe située dans src. (la première dans l'ordre alphabétique et la première à être compilée). Actuellement, lib est vide, tous les hpp sont situés dans src. Le Makefile est situé dans un dossier où se situent les dossiers src, lib, etc ...

    J'espère que vous pourrez m'éclairer.
    En vous remerciant par avance,

    Xavier Duval

  2. #2
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Ton répertoire src contient-il un fichier "Acteur.h" ?
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    le répertoire "src" contient tous les ".cpp" et les ".hpp" donc Acteur.cpp et Acteur.hpp.

    Il y avait une petite faute de frappe dans le Makefile (j'ai mis des .h, mais ce sont des .hpp). Cela ne règle pas le problème

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Salut,

    Si le but n'est pas d'apprendre à faire des Makefile, je te conseillerai plutôt d'utiliser CMake pour générer ton Makefile.

    J'ai fait des scripts CMake génériques qui peuvent peut-être t'intéressé: c'est ici que ça ce passe.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    En effet le but n'est pas d'apprendre à faire un Makefile mais plutôt de s'en servir comme outil pour compiler. Pour cela que j'essaie d'en faire un simple et clair. Mais je vais regarder le lien que tu m'as passé et voir si cela pourrait convenir ! Merci !

    En attendant si vous avez des remarques à faire pour corriger celui que j'ai posté, ce sera le bienvenu

  6. #6
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Tu peux essayer avec le Makefile en pj pour voir si tu as toujours l'erreur ?
    Fichiers attachés Fichiers attachés
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Cela fonctionne très bien !
    En revanche, j'ai retiré la commande -ltiff, car il ne trouve pas la libraire. Est-ce important ?

    Merci !!!

  8. #8
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par Xavier767 Voir le message
    En revanche, j'ai retiré la commande -ltiff, car il ne trouve pas la libraire. Est-ce important ?
    Dans le répertoire que j'ai envoyé non
    Après c'est à toi de voir si tu en as besoin pour ton projet.

    As-tu essayé ce Makefile avec tes sources ?
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui cela fonctionne bien.
    Le seul petit bémol que je n'arrive pas à corriger est le suivant :

    Lorsque l'on crée les objets, par exemple :

    %.o: %.cpp %.hpp
    ...................................

    J'ai parfois un cpp qui va utiliser 1,2 ou 3 hpp. Je ne vois pas trop comment l'indiquer si ce n'est utiliser une méthode un peu lourde qui consisterait à écrire toutes ces lignes pour chaque .cpp
    Y a t'il une solution plus efficace ?

    Pour vous donner une idée, la fin de la compilation donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    g++ -o lib/VoieCyclable.o -c src/VoieCyclable.cpp -Isrc -g -Wall -pedantic -Os
    g++ -o lib/VoiePietonne.o -c src/VoiePietonne.cpp -Isrc -g -Wall -pedantic -Os
    g++ -o lib/VoieRoutiere.o -c src/VoieRoutiere.cpp -Isrc -g -Wall -pedantic -Os
    g++ -o lib/Voiture.o -c src/Voiture.cpp -Isrc -g -Wall -pedantic -Os
    make: *** No rule to make target `lib/main.o', needed by `Projet'.  Stop.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Le sujet est résolu ! Le problème était que les dépendances n'étaient pas spécifiées.

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

Discussions similaires

  1. copie de fichiers dans différents dossiers
    Par mig87 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/09/2011, 08h56
  2. suppression des fichiers text dans différents dossiers
    Par guefrachi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/07/2010, 11h26
  3. Réponses: 7
    Dernier message: 05/01/2006, 01h06
  4. Pb de comptage de fichiers dans un dossier
    Par oz80 dans le forum Access
    Réponses: 2
    Dernier message: 15/11/2005, 14h26

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