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

C++ Discussion :

Choisir le répertoire des .o dans un makefile.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 87
    Par défaut Choisir le répertoire des .o dans un makefile.
    Bonjour,

    J'ai un projet contenant dont les sources sont organisées ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    src
        util
            util.cpp
        ressources
           ressource1.cpp
           ressource2.cpp
           ...
        lib
           lib.cpp
    build
        makefile
    J'ai créé le makefile suivant pour compiler ma lib :
    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
     
    CPP=g++
    INCLUDE=-I"../src"
    CXXFLAGS=$(INCLUDE) -O0 -g3 -Wall -fmessage-length=0
    LIB=lib.a
    LIBDEST=./Debug/
    LIBSRC= ../src/util/util.cpp \
                   ../src/ressources/ressource1.cpp \
                   ...
    LIBOBJ= $(LIBSRC:../src/%.cpp=./obj/%.o)
    AR=ar
     
    all: $(LIB)
     
    $(LIB): $(LIBOBJ)
    	$(AR) -r $(LIB) $(LIBOBJ)
    	mv $(LIB) $(LIBDEST)
     
    ./obj/%.o:../src/%.cpp
    	$(CPP) -c $< -o $@ $(CXXFLAGS)
    Quand je lance make depuis le répertoire build j'aimerai que les fichiers .o soient placés dans /build/obj/ mais j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g++ -c ../src/util/util.cpp -o obj/util/util.o -I"../src" -O0 -g3 -Wall -fmessage-length=0
    Assembler messages:
    Fatal error: can't create obj/util/util.o: No such file or directory
    Avez-vous une idée de comment faire?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Je pense qu'il faut créer le répertoire de sortie avant, typiquement avec un mkdir.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 87
    Par défaut
    Ok alors du coup j'ai ajouté la liste des répertoires au début de mon makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SRCDIR= ../src/util/ \
    	../src/ressources/ \
    	../src/lib/ \
    et une boucle créant les répertoires avant la compil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    createoutdir:
    	@for dir in $(SRCDIR:../src/%=./obj/%) ; do \
    		mkdir -p $$dir ; \
    	done
    Ma question maintenant est la suivante. Est-il possible de déduire la liste des répertoire a partir la liste des sources avec une commande dansd le même style que LIBOBJ= $(LIBSRC:../src/%.cpp=./obj/%.o)? Ou alors de déduire la liste des fichiers a compiler depuis la liste des répertoires avec une commande du style $(wildcard *.cpp)? Ou n'importe quelle autre solution pour éviter la redondance entre SRCDIR et LIBSRC.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Oui clairement.
    Par contre ça fait des années que je ne fais plus de Makefile donc je ne vais pas pouvoir te sortir le bout de code là comme ça...

    MAT.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/11/2010, 12h02
  2. Déclarer des constante dans le makefile
    Par Colbix dans le forum Eclipse C & C++
    Réponses: 2
    Dernier message: 09/03/2009, 17h33
  3. Choisir un répertoire par défaut dans un GetOpenFileName
    Par Alqualonde dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/01/2008, 16h57
  4. Ajouter des bibliothèques dans un Makefile
    Par insa59 dans le forum GTK+ avec C & C++
    Réponses: 24
    Dernier message: 11/04/2007, 18h50
  5. Gestion des headers dans un Makefile
    Par Weren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/11/2004, 10h44

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