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 :

header dans makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut header dans makefile
    Bonjour,
    Je rencontre un petit probleme dans un makefile, pour générer mon objet je dois lier mon header qui lui est lié a un autre header. Le probleme est que je ne sais pas comment faire pour creer le lien entre ces deux headers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #  param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  $(DSRC)/param.h $(DINC)/lib.h 
    	$(CC) -c $(CC_FLAG) $(DSRC)/param.c -o $(DOBJ)/param.obj
    Si quelqu'un pouvait m'éclairer merci beaucoup

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    a l'origine j'utilisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # Generic rule for object building
    %.o : %.c
    	@echo == Compiling $< ...
    	$(CC) -c $(CC_FLAG) -o $@ $<
    Mais je ne comprends pas la ligne "@echo == Compiling $< ..."
    Et de plus en utilisant cette facon les .o sont générés dans le répertoire du .c y a t il une methode pour mettre directement les .o dans un meme dossier unique?
    merci

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sone47 Voir le message
    Je rencontre un petit probleme dans un makefile, pour générer mon objet je dois lier mon header qui lui est lié a un autre header.
    Le probleme est que je ne sais pas comment faire pour creer le lien entre ces deux headers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #  param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  $(DSRC)/param.h $(DINC)/lib.h 
    	$(CC) -c $(CC_FLAG) $(DSRC)/param.c -o $(DOBJ)/param.obj
    Si quelqu'un pouvait m'éclairer merci beaucoup
    Ou la la ! Que de confusions... Il faut absolument apprendre à maitriser le vocabulaire technique, sinon, c'est la confusion la plus totale...
    pour générer mon objet je dois lier mon header <...>
    Non. On ne lie pas un header. On l'inclus dans un fichier (.c ou .h).
    <...> mon header qui lui est lié a un autre header.
    Il ne s'agit pas lien mais de dépendances. Il suffit de l'ajouter dans la liste des dépendances.

    C'est d'ailleurs ce que tu as fait, alors je ne vois pas bien quel est est le problème.

    Ta règle dit : "param.c dépend de la présence (et de la date) de param.h et de lib.h".
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Peut-être qu'en rajoutant "-I $(DSRC) -I $(DINC)" dans CC_FLAG ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Merci.
    Voici:
    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
    all: $(DEXE)/param.exe
     
    $(DEXEC)/param.exe : $(DOBJ)/param.o $(DOBJ)/param_var.o $(DOBJ)/param_test.o
    	$(CC) $(CFLAGS) -o $(DEXE)/param.exe $param_test.o $(DOBJ)/param.o $(DOBJ)/param_var.o $(DINC)/lib.h
     
    # The test file
    $(DOBJ)/param_test.o : $(DSRC)/param_test.c $(DINC)/lib.h $(DINC)/lib_ife.h $(DSRC)/param.h          
    	$(CC) -c $(CFLAGS) $(DSRC)/param_test.c -o $(DOBJ)/param_test.o 
     
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  $(DSRC)/param.h $(DINC)/lib.h 
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o 
     
    # The param_var.c file
    $(DOBJ)/param_var.o : $(DSRC)/param_var.c $(DSRC)/param.h
    	$(CC) -c $(CFLAGS) $(DSRC)/param_var.c -o$(DOBJ)/param_var.o
    et l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *** No rule to make target `/lib.h', needed by `obj/param.o'.  Stop.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    est ce qu'avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  $(DSRC)/param.h $(DINC)/lib.h 
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o
    la dependance entre param.h et lib.h est elle assurée?
    car param.c depend de lib.h et param.h mais param.h depend aussi de lib.h
    merci

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Bonjour,

    Définis la variable DINC dans ton Makefile.

    Si tu veux générer les dépendances automatiquement, tu peux jeter un coup d'oeil à makedepend. Il scanne les sources et ajoute les dépendances à la fin du fichier Makefile. Par contre, je ne l'utilise plus et je ne me rappelle plus comme ça comment on fait avec des répertoires différents pour les sources et les objets.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Elle est bien définie dans le makefile.
    Mais pourquoi l'erreur est qu'il n'y a pas de regles, faut il une speciale?
    Merci je vais jeter un oeil

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Il y a effectivement une erreur car il ne trouve pas le fichier /lib.h (il n'est sûrement pas à la racine) alors qu'il devrait dire qu'il ne trouve pas la règle pour le fichier $(DINC)/lib.h (avec DINC remplacé par sa valeur), ce qui me laisse dire que la variable DINC est vide ou n'existe carrément pas.
    Tu es sûr de ce que tu dis ? Tu ne nous as pas envoyé tout le Makefile. En tout cas, ta variable DOBJ est bien définie et vaut obj.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    La variable y est pourtant

    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
    # Paths
    DSRC = C
    DINC = ../../library/include  
    DOBJ = obj
    DEXE =
    DLIB =  
     
    # Compiler flags
    CFLAGS = -mno-cygwin -O2 -I$(subst $(space), -I,$(strip $(DINC))) -Wall -D_GNU_VER -DETEST_C
     
     
    # Commands
    CC = gcc 
    LK = ld
    RM = del
     
    all: $(DEXE)/param.exe
     
    $(DEXEC)/param.exe : $(DOBJ)/param.o $(DOBJ)/param_var.o $(DOBJ)/param_test.o
    	$(CC) $(CFLAGS) -o $(DEXE)/param.exe $param_test.o $(DOBJ)/param.o $(DOBJ)/param_var.o $(DINC)/lib.h
     
    # The test file
    $(DOBJ)/param_test.o : $(DSRC)/param_test.c $(DINC)/lib.h $(DINC)/lib_ife.h $(DSRC)/param.h          
    	$(CC) -c $(CFLAGS) $(DSRC)/param_test.c -o $(DOBJ)/param_test.o 
     
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  $(DSRC)/param.h $(DINC)/lib.h 
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o 
     
    # The param_var.c file
    $(DOBJ)/param_var.o : $(DSRC)/param_var.c $(DSRC)/param.h
    	$(CC) -c $(CFLAGS) $(DSRC)/param_var.c -o$(DOBJ)/param_var.o
    est elle mal déclarée?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    J'ai mis mes deux headers dans mon repertoire courant pour etre sur de ne pas avoir un probleme sur la variable DINC.
    Apres avoir executé mon makefile je remarque que dans tous mes appels de fonctions (declarées dans mes headers) chaque fonction est précédée d'un underscore je ne sais pas si ca joue sur quelque chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gcc  -mno-cygwin -O2 -I../../library/include -I -Wall -D_GNU_VER -DETEST_C -o /p
    param.exe obj/param_etest.o obj/param.o obj/param_var.o
    obj/param_etest.o:param_etest.c:(.text+0x305): undefined reference to `_f_file_open'
    alors que ma fonction est merci

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    J'ai modifié mon makefile (mais rien n'a changé)
    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
    $(DEXE)/param.exe : $(DOBJ)/param.o $(DOBJ)/param_var.o $(DOBJ)/param_test.o
    	$(CC) $(CFLAGS) -o $(DEXE)/param.exe $(objects) 
     
    	param_test.o : lib.h lib_ife.h lib.h C/param.h
    	param.o: lib.h C/param.h
    	param_var.o: C/param.h
     
    # The etest file
    $(DOBJ)/param_etest.o : param_test.c           
    	$(CC) -c $(CFLAGS) param_test.c -o $(DOBJ)/param_test.o 
     
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o 
     
    # The param_var.c file
    $(DOBJ)/param_var.o : $(DSRC)/param_var.c 
    	$(CC) -c $(CFLAGS) $(DSRC)/param_var.c -o $(DOBJ)/param_var.o
    Par contre comment indiquer la dépendance entre deux .h?
    Car mon param.h inclut lib.h

    Merci

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Par contre comment indiquer la dépendance entre deux .h?
    Ce qui est intéressant, c'est de savoir de quoi dépend param.c pour savoir s'il est nécessaire de le regénérer ou non. Maintenant, que param.h dépendent de lib.h, eh bien je te dirais bah ouais c'est bien mais ça ne sert à rien de le savoir. Si tu savais le nombre de headers qui dependent d'autres.

    chaque fonction est précédée d'un underscore
    c'est normal

    Et pour ton erreur, vire les espaces à la fin de la ligne DINC = ...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    J'ai bien vérifié toute mes dependances et tout est ok
    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
    all: $(DEXE)/param.exe
     
    $(DEXE)/param.exe : $(DOBJ)/param.o $(DOBJ)/param_var.o $(DOBJ)/param_test.o
    	$(CC) $(CFLAGS) -o $(DEXE)/param.exe $(objects) 
     
    	param_etest.o : lib_ife.h lib.h C/param.h
    	param.o: C/param.h lib.h
    	param_var.o: C/param.h
     
    # The test file
    $(DOBJ)/param_test.o : param_test.c           
    	$(CC) -c $(CFLAGS) param_test.c -o $(DOBJ)/param_test.o 
     
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c  
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o 
     
    # The param_var.c file
    $(DOBJ)/param_var.o : $(DSRC)/param_var.c 
    	$(CC) -c $(CFLAGS) $(DSRC)/param_var.c -o $(DOBJ)/param_var.o
    Je n'avais pas vérifié ca je vais voir merci

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Non tout était ok la variable est bien définie mais le probleme persiste
    Mais ceci ne peut pas venir de la car pour simplifier j'ai mis mes deux header dans mon repertoire courant sans utiliser 'DINC' et la dépendance n'est pas interprétée.
    Le probleme vient de ces headers qui ne sont pas pris en compte mais pourquoi
    Merci

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Non tout était ok la variable est bien définie.
    Euh on va reprendre pour être sûr.
    A la fin de la ligne suivante, il y a deux espaces en trop. Ils n'y sont plus maintenant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DINC = ../../library/include
    la dépendance n'est pas interprétée.
    Tu m'étonnes. Tu les as effacé de la ligne suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(DOBJ)/param.o : $(DSRC)/param.c  
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o
    Ton exécutable dépend de $(DOBJ)/param.o pas de param.o. Ces lignes là ne servent à rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	param_etest.o : lib_ife.h lib.h C/param.h
    	param.o: C/param.h lib.h
    	param_var.o: C/param.h

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    merci beaucoup de m'aider.
    ok j'ai retiré les lignes qui ne servaient a rien (je n'avais pas remarqué que j'avais mal spécifié mes fichiers obj) pour revenir a ma config initiale et j'ai toujours le meme probleme

    Voici le 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # Makefile param
     
    # Paths
    DSRC =C
    DINC =../../library/include
    DOBJ =obj
    DEXE =
    DLIB =  
    objects = $(DOBJ)/param_test.o $(DOBJ)/param.o $(DOBJ)/param_var.o
     
     
    # Compiler flags
    CFLAGS = -mno-cygwin -O2 -I$(subst $(space), -I,$(strip $(DINC))) -Wall -D_GNU_VER -DETEST_C
     
     
    # Commands
    CC = gcc 
    LK = ld
    RM = del
     
    all: $(DEXE)/param.exe
     
    $(DEXE)/param.exe : $(objects)
    	$(CC) $(CFLAGS) -o $(DEXE)/param.exe $(objects) 
     
     
    # The test file
    $(DOBJ)/param_test.o : param_test.c $(DINC)/lib_ife.h $(DINC)/lib.h $(DSRC)/param.h       
    	$(CC) -c $(CFLAGS) param_test.c -o $(DOBJ)/param_test.o 
     
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c $(DSRC)/param.h $(DINC)/lib.h  
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o 
     
    # The param_var.c file
    $(DOBJ)/param_var.o : $(DSRC)/param_var.c $(DSRC)/param.h
    	$(CC) -c $(CFLAGS) $(DSRC)/param_var.c -o $(DOBJ)/param_var.o
    Merci

    Faut il remettre les dependances dans la commande pour générer l'exe?

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    et j'ai toujours le meme probleme
    Tu balances tellement de messages que je ne suis plus. Renvoie l'erreur.

    Tu n'étais pas obligé de supprimer l'espace après le = par contre.

    Faut il remettre les dependances dans la commande pour générer l'exe?
    Oui les .o mais rien d'autres.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Que je mette ou non les trois regles pour mes objets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # The etest file
    $(DOBJ)/param_test.o : param_test.c $(DINC)/lib_ife.h $(DINC)/lib.h $(DSRC)/param.h        
    	$(CC) -c $(CFLAGS) param_test.c -o $(DOBJ)/param_test.o 
     
    # The param.c file
    $(DOBJ)/param.o : $(DSRC)/param.c $(DSRC)/param.h $(DINC)/lib.h  
    	$(CC) -c $(CFLAGS) $(DSRC)/param.c -o $(DOBJ)/param.o 
     
    # The param_var.c file
    $(DOBJ)/param_var.o : $(DSRC)/param_var.c $(DSRC)/param.h
    	$(CC) -c $(CFLAGS) $(DSRC)/param_var.c -o $(DOBJ)/param_var.o
    les erreurs sont les memes peut etre il ne les executes pas?

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    J'ai comme l'impression que tes .o et ton exe ont déjà été générés. Si tu ne modifies pas tes sources ou tes headers, rien ne sera régénéré. Ou alors effaces tes .o et ton exe.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. 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, 16h23
  2. [MFC] Hauteur du header dans un CListCtrl
    Par ouquoi dans le forum MFC
    Réponses: 2
    Dernier message: 07/02/2006, 14h56
  3. Cacher un header dans une CListCtrl
    Par Psykotik dans le forum MFC
    Réponses: 2
    Dernier message: 19/12/2005, 15h48
  4. [ Wsad ] Comment ignorer $Header$ dans un compare ?
    Par dsi0743 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/12/2005, 17h36
  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