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 :

Objet avec options de compilation dans un makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut Objet avec options de compilation dans un makefile
    Bonjour à tous,

    je suis sur un projet pour lequel je souhaite une interface graphique. Pour compiler mon projet, j'utilise un makefile assez généraliste, mais pour compiler le fichier de l'interface graphique, j'ai besoin d'options supplémentaires. Ma question est donc, comment modifier mon makefile pour qu'il prenne en compte mon fichier graph.cpp en le linkant avec les librairies nécessaires.
    Voici mon makefile:

    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
    NOM = lapinoux
     
    override CXXFLAGS+=-Wall
    LDFLAGS =
     
    #Liste des objets à lies pour produire l'executable
    OBJETS = main.o animal.o lapin.o renard.o pile.o carte.o graph.o
     
     
    #Regle generale de production des objets
     
    #Regle de production de l'executable
    #$(REP_EXEC)/$(NOM).$(VERSION): $(OBJETS)
    $(NOM): $(OBJETS)
    	$(CXX) $(LDFLAGS) $^ -o $@
     
     
    clean:
    	@$(RM) *.o *~ *.*~
    et les options pour une compilation "classique" de mon fichier d'interface graphique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -o GRAPH graph.cpp `sdl-config --cflags --libs` -lSDL_ttf -lfreetype


    Merci d'avance !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    LDFLAGS, ça sert pour le `sdl-config --libs` -lSDL_ttf -lfreetype.
    Pour le reste, tu mets toujours `sdl-config --cflags`

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Tout d'abord, merci pour ta réponse.

    Bon, voici donc mon Makefile corrigé:
    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
    NOM = lapinoux
     
    override CXXFLAGS+=-Wall
    LDFLAGS = `sdl-config --libs` -lSDL_ttf -lfreetype
     
    #Liste des objets à lies pour produire l'executable
    OBJETS = main.o animal.o lapin.o renard.o pile.o carte.o graph.o
     
     
    #Regle generale de production des objets
     
    #Regle de production de l'executable
    #$(REP_EXEC)/$(NOM).$(VERSION): $(OBJETS)
    $(NOM): $(OBJETS)
    	$(CXX) $(LDFLAGS) $^ -o $@
     
     
    clean:
    	@$(RM) *.o *~ *.*~
     
    jesuisperdu:
    	@$(RM) *~ *.*~
    ca m'a donné plusieurs erreurs, comme quoi certains fichiers n'étaient pas trouvés dans les include. (#include <SDL.h> et #include <SDL_TTF.h> que j'ai remplacé respectivement par #include <SDL/SDL.h> et #include <SDLSDL_TTF.h>)
    Bon, mais maintenant, ca me donne ca:
    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
    [philippe@localhost projet_lapin]$ make
    g++ `sdl-config --libs` -lSDL_ttf -lfreetype main.o animal.o lapin.o renard.o pile.o carte.o graph.o -o lapinoux
    graph.o: In function `texte_de_base()':
    graph.cpp:(.text+0x59d): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x5d8): undefined reference to `TTF_SetFontStyle'
    graph.cpp:(.text+0x5f5): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x628): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x652): undefined reference to `TTF_SetFontStyle'
    graph.cpp:(.text+0x66f): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x6a2): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x6cc): undefined reference to `TTF_SetFontStyle'
    graph.cpp:(.text+0x6e9): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x71c): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x746): undefined reference to `TTF_SetFontStyle'
    graph.cpp:(.text+0x763): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x7a7): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x7d1): undefined reference to `TTF_SetFontStyle'
    graph.cpp:(.text+0x7ee): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x832): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x85c): undefined reference to `TTF_SetFontStyle'
    graph.cpp:(.text+0x879): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x8bd): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x8f1): undefined reference to `TTF_RenderText_Blended'
    graph.cpp:(.text+0x935): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0x969): undefined reference to `TTF_RenderText_Blended'
    graph.o: In function `affiche_h_herbe(int, int)':
    graph.cpp:(.text+0xaee): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0xb36): undefined reference to `TTF_RenderText_Blended'
    graph.o: In function `affiche_nb_renards(int, int)':
    graph.cpp:(.text+0xc28): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0xc70): undefined reference to `TTF_RenderText_Blended'
    graph.o: In function `affiche_nb_lapins(int, int)':
    graph.cpp:(.text+0xd62): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0xdaa): undefined reference to `TTF_RenderText_Blended'
    graph.o: In function `modif_affich_case(int, int)':
    graph.cpp:(.text+0xe9c): undefined reference to `TTF_OpenFont'
    graph.cpp:(.text+0xefb): undefined reference to `TTF_RenderText_Blended'
    graph.o: In function `graph_init()':
    graph.cpp:(.text+0x12e4): undefined reference to `TTF_Init'
    collect2: ld returned 1 exit status
    make: *** [lapinoux] Erreur 1
    [philippe@localhost projet_lapin]$
    Je suis sur qu'il ne manque qu'un petit truc, mais quoi???

    Merci d'avance !

    Philippe

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Les bibliothèques soivent être à la fin, pas au début, en fait, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(CXX) $^ -o $@ $(LDFLAGS)
    plutôt - l'édition des liens commence par la fin, et il faut peut être même mettre les -lSDL_ttf au début du $(LDFLAGS)

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup, ca marche nickel !

    Voici le makefile corrigé:

    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
    NOM = lapinoux
     
    override CXXFLAGS+=-Wall
    LDFLAGS = `sdl-config --cflags --libs` -lSDL_ttf -lfreetype -lSDL
     
    #Liste des objets à lies pour produire l'executable
    OBJETS = main.o animal.o lapin.o renard.o pile.o carte.o graph.o
     
     
    #Regle generale de production des objets
     
    #Regle de production de l'executable
    #$(CXX) $(LDFLAGS) $^ -o $@
    #$(REP_EXEC)/$(NOM).$(VERSION): $(OBJETS)
    $(NOM): $(OBJETS)
    	$(CXX) $^ -o $@ $(LDFLAGS)
     
     
    clean:
    	@$(RM) *.o *~ *.*~

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

Discussions similaires

  1. Option de compilation dans les fichiers *.dfm
    Par j.p.mignot dans le forum EDI
    Réponses: 12
    Dernier message: 21/08/2014, 10h30
  2. changer une option dans un makefile avec un script bash
    Par dedey63 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 26/07/2012, 14h56
  3. Réponses: 1
    Dernier message: 15/11/2010, 22h13
  4. Inclusion d'un header lors de la compilation dans Makefile
    Par Kaeguri dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 03/04/2007, 17h23
  5. Réponses: 1
    Dernier message: 18/06/2004, 02h12

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