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 :

makefile problème compilation


Sujet :

C

  1. #1
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut makefile problème compilation
    Bonjour,

    regardez je fais ceci:
    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
     
    #
    # Barbara makefile
    #
     
    all: barbara
    barbara: main.o chess.o net.o
    	gcc -o barbara main.o chess.o net.o
     
    chess.o: chess.c chess.h head.h
    	gcc -c chess.c
     
    net.o: net.c net.h head.h
    	gcc -c net.c
     
    main.o: main.c head.h 
    	gcc -c main.c
     
    clean:
    	rm -rf *.o
     
    mrproper: clean
    	rm -rf barbara
    Mais en sortie j'ai des erreurs qui disent qu'il ne trouve pas les headers ...
    c'est dû à quoi?
    merci

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Qui te donne un message d'erreur? make ou gcc?

    Où sont les fichiers qui te sont reportés manquant? Ou est le makefile?

    Le makefile n'est pas parfait, mais il n'y a a priori rien qui explique l'erreur dans ce que tu montres.

  3. #3
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    hola :]

    les erreurs viennent de chez gcc
    le makefile ainsi que les sources sont tous dans le même répertoire

    Pour le make j'ai regardé plus ou moins le tutorial qui se trouve sur developpez.com, mais bon j'espère que ca suffit pour savoir ce qui bug

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Goundy
    les erreurs viennent de chez gcc
    Si tu lances la même commande à la main, ça compile?

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Il faut vérifier les ordres 'include' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "header.h"
    cherche le fichier à include d'abord dans le répertoire où se trouve le source qui veut inclure et ensuite dans les répertoires "standards" (par exemple /usr/include).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <header.h>
    cherche seulement à partir des répertoires "standards".

    Pour éviter ce genre de pb, il faut ajouter -Idir dans les options de compilation où dir correspond à un répertoire surplémentaire dans la recherche "standard".

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonsoir,


    si tu veux un makefile complet qui ne nécessite pas de mettre tous les noms de fichiers :
    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
     
    CC=gcc
    CPP=g++
     
    # Les différents répertoires contenant respectivement les fichiers : Sources *.c, Headers *.h, Objets *.o, l'exécutable
    SRCDIR=Src
    HEADDIR=Include
    LIBDIR=Objet
    BINDIR=Bin
     
    # Les différentes options de compilations, soyons strictes !
    CFLAGS= -I$(HEADDIR) -g -Wall -pedantic -Os
    # Les différents FrameWorks et bibliothèques pour le linkage
    GLLIBS = -ltiff -framework OPENGL -framework GLUT -framework GLUI -lobjc -lstdc++ -lm
     
     
    # L'exécutable
    BIN=Executable
     
     
    # Où trouver les différents sources *.c qu'il faudra compiler pour créer les objets correspondants
    SRC= $(wildcard $(SRCDIR)/*.c)
    OBJ= $(SRC:$(SRCDIR)/%.c=$(LIBDIR)/%.o)
     
    # Où trouver les différents sources *.cpp qu'il faudra compiler pour créer les objets correspondants
    SRCPP= $(wildcard $(SRCDIR)/*.cpp)
    OBJCPP= $(SRCPP:$(SRCDIR)/%.cpp=$(LIBDIR)/%.o)
     
     
    # Le all, première ligne éxécuté por le make, elle annonce ce qui doit être lancé.
    all: $(BIN)
     
    #Création de l'exécutable
    Executable: $(OBJ) $(OBJCPP)
    	$(CC) -o $(BINDIR)/$@ $^ $(CFLAGS) $(GLLIBS)
     
    # Création des différents *.o à partir des *.c
    $(LIBDIR)/%.o: $(SRCDIR)/%.c $(HEADDIR)/%.h 
    	$(CC) -o $@ -c $< $(CFLAGS)
     
    # Création des différents *.o à partir des *.cpp
    $(LIBDIR)/%.o: $(SRCDIR)/%.cpp $(HEADDIR)/%.h
    	$(CPP) -o $@ -c $< $(CFLAGS)
     
     
    # Pour éviter les problèmes de dates sur certains fichiers lors des modifications.
    .PHONY: clean Clean
     
     
     
    # Nettoyage des objets => Tout sera recompiler !
    clean:
    	rm $(LIBDIR)/*.o
     
    # Nettoyage complet => clean + effacement du l'exécutable
    Clean: clean
    	rm $(BINDIR)/*
     
    # On compte le nombre de lignes du programme
    Count:
    	-grep [a-zA-Z"{""}"] $(SRCDIR)/*.c $(SRCDIR)/*.cpp $(HEADDIR)/*.h | wc -l
    Avec ça, tout est rangé dans des répertoires au lieu d'être en vrac...

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonsoir,

    oups j'ai oublié :
    - les GLLIBS doivent être les tiennes.
    - là ils s'agit des miens pour macosx, le tiffs et opengl...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Salut,

    il faudrait que tu donnes plus de précision (arborescence de ton projet, j'imagine qu'elle est très simple)

    Si la solution de Toto13 t'effraie (bien qu'elle donne l'exemple d'un Makefile réel), tu peux toujours reprendre ton Makefile d'origine (suffisant pour ton projet), en rajoutant des options -I pour préciser au compilateur où chercher les fichiers d'inclusion (c'est un oubli très courant quand on débute) (cf post d'athoth)

    -I <répertoire contenant tes fichiers d'inclusion> (l'option peut être répétée pour plusieurs répertoires)

    Si par exemple, tes fichiers header se trouvent au même endroit que ton Makefile et tes fichiers de code (très courant pour des petits projets), tu devras peut-être rajouter -I . (-I suivi d'un point).

    Dans un sous-répertoire include du répertoire courant (autre situation très courante) : -I ./include

    Ce n'est pas une solution "professionnelle" mais qui devrait être suffisante pour ton problème.

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Corentor
    Si par exemple, tes fichiers header se trouvent au même endroit que ton Makefile et tes fichiers de code (très courant pour des petits projets), tu devras peut-être rajouter -I . (-I suivi d'un point)
    -I. est généralement la solution de ceux qui n'ont pas compris le problème. L'hypothèse d'athoth d'un abus de directive avec <> me semble la plus vraissemblable de celles données jusqu'à présent.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    L'hypothèse d'athoth d'un abus de directive avec <> me semble la plus vraissemblable de celles données jusqu'à présent
    J'en suis également convaincu.
    Il peut arriver cependant des cas où l'option -I. est indispensable (soit, dans le cas présent, c'est vraiment peu probable ici).

    J'ai déjà rencontré un système où gcc était aliasé (ne me demandez pas pourquoi, et ça a été corrigé ensuite) avec l'option -I- (aujourd'hui dépréciée) dont l'un des effets est le suivant :

    the -I- option inhibits the use of the current directory (where the current input file came from) as the first search directory for #include "file". There is no way to override this effect of -I-. With -I. you can specify searching the directory which was current when the compiler was invoked. That is not exactly the same as what the preprocessor does by default, but it is often satisfactory

  11. #11
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Corentor
    J'en suis également convaincu.
    Il peut arriver cependant des cas où l'option -I. est indispensable (soit, dans le cas présent, c'est vraiment peu probable ici).
    C'est pourquoi j'ai écrit généralement. On peut aussi concevoir un système de build ou on ne copie que les sources qu'on désire modifer, le reste étant pris dans un arbre commun (j'ai utilisé un tel système avec un autre langage que du C++). En conjonction avec -I- ou l'équivalent Le -I. permet alors de prendre les sources modifiées plutôt que celle de l'arbre commun.

  12. #12
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Les mecs, je vous remercie :]

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

Discussions similaires

  1. Problème compilation makefile
    Par Cronos59 dans le forum Windows
    Réponses: 0
    Dernier message: 09/01/2009, 09h05
  2. Problème compilation (toolkit Maximum Entropy)
    Par yannick_frere dans le forum MFC
    Réponses: 4
    Dernier message: 07/03/2005, 09h47
  3. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  4. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21

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