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 :

Probleme avec Makefile


Sujet :

Systèmes de compilation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Points : 27
    Points
    27
    Par défaut Probleme avec Makefile
    Bonjour
    J'ai un probleme avec un Makefile. J'ai les fichiers suivants :

    Etudiant.h
    Etudiant.c ---> #include "Etudiant.h"
    main.c ---> #include "Etudiant.h"

    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
     
    CC		= gcc
    OBJS 	= main.o, Etudiant.o
    CFLAGS 	= -c -Wall -ansi -pedantic
    PGM 	= programme
     
     
     
     
    $(PGM): $(OBJS)
    	$(CC) -o $(PGM) $(OBJS)
     
    .c.o :
    	$(CC) $(CFLAGS) $<
    make me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make: *** No rule to make target `main.o,', needed by `programme'.  Stop.
    Avec ce 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
    CC		= gcc
    OBJS 	= main.o, Etudiant.o
    CFLAGS 	= -c -Wall -ansi -pedantic
    PGM 	= programme
     
     
     
     
    $(PGM): $(OBJS)
    	$(CC) -o $(PGM) $(OBJS)
     
    main.o : main.c, Etudiant.h
    	$(CC) $(CFLAGS) main.c
     
    Etudiant.o : Etudiant.c, Etudiant.h
    	$(CC) $(CFLAGS) Etudiant.c

    make me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make: *** No rule to make target `main.o,', needed by `programme'.  Stop.

    make main.o me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make: *** No rule to make target `main.c,', needed by `main.o'.  Stop.

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 109
    Points
    109
    Par défaut
    Salut, je ne suis qu'un débutant en makefile et n'apporte aucune certitude à ce que je vais raconter... mais deux ou trois choses me chifonnent dans tes makefiles.
    Dans tous ceux que tu as fournis, je doute de la justitude de la virgule introduite dans la variable OBJS.
    Je suis un tel débutant que je ne comprends pas ce que tu racontes dans la règle lignes 13 et 14 de ton premier makefile.
    Par contre dans le second, j'ai bien peur qu'il y ait a nouveau un probleme de virgules dans la liste des dependances, dans les exemples de makefiles que j ai lu jusqu a présent il n y en avait pas...
    D'ailleurs quand tu lis les messages d erreurs renvoyés (que ce soit pour ton premier makefile ou ton second) la virgule fait partie integrante du nom de la dépendance au sujet de laquelle make se plaint !
    Vire ces virgules et si t as le temps de m'expliquer le sens de ta règle lignes 13 et 14 de ton premier makefile je suis preneur

  3. #3
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Bonjour,

    BaygonV le fait très justement remarquer la virgule est en trop et make te le dit (j'ai agrandi la virgule dans le message d'erreur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make: *** No rule to make target `main.o,', needed by `programme'.  Stop.
    De plus il vaut mieux écrire la règle implicite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .c.o :
    	$(CC) $(CFLAGS) $<
    ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %.o : %.c
    	$(CC) $(CFLAGS) $<
    Définir des règles implicites ne doit pas t’empêcher ensuite de lister les dépendances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    main.o : main.c Etudiant.h
     
    Etudiant.o : Etudiant.c Etudiant.h
    en n'oubliant pas de ne pas mettre de virgules.

    La règle implicite décrit comment construire l'objet (compiler avec $(CC) en lui passant les paramètres de $(CFLAGS) et le nom du premier prérequis). Les dépendances donnent le premier prérequis (la source) et la liste des fichiers qui si ils sont modifiés devront relancer la compilation.

    Il peut être intéressant de se plonger dans la documentation de make pour avoir plus d'infos.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Points : 109
    Points
    109
    Par défaut
    Merci picodev pour tes éclaircissements, je connaissais "ta" facon de décrire des règles implicites par contre je ne connaissais pas l'autre.
    Sérieusement, je lis, je lis....
    toutes les docs de :
    Flex, Bison, make, bash
    + différents tutos de remise a niveau en C++.
    Et il y a des moments ou sérieusement j'en ai un peu marre de lire des docs et je prends le raccourci de venir chercher ici des informations.
    Exemple : depuis hier j'essaie de faire générer a flex un scanner sous forme de classe C++, pour pouvoir ensuite la dériver pour y ajouter des membres (notamment un driver). Je lis et relis la doc dans tous les sens pour m'apercevoir qu'un commentaire dans le code C++ généré par Flex m'explique que grosso modo il peut être impossible de dériver une classe yyFlexLexer et qu il faut attendre qu une prochaine version de Flex corrige ce probleme... :'(

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Points : 27
    Points
    27
    Par défaut
    Exact c'est bien la "," suis vraiment uin boulet.
    Le cours que je lisais mettais des "," c'est apparement faux.



    Merci

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

Discussions similaires

  1. Probleme avec makefile
    Par asma.r dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 19/10/2009, 11h26
  2. probleme avec makefile
    Par k.a.m.o.u dans le forum Linux
    Réponses: 3
    Dernier message: 16/04/2009, 14h39
  3. Probleme de compilation avec Makefile et Oracle V10
    Par miketidy dans le forum Linux
    Réponses: 2
    Dernier message: 10/09/2008, 09h48
  4. [débutant]probleme avec makefile-module objet non créé
    Par Invité dans le forum Systèmes de compilation
    Réponses: 5
    Dernier message: 13/06/2007, 18h22
  5. Problème avec un Makefile
    Par _kal_ dans le forum Linux
    Réponses: 1
    Dernier message: 03/08/2006, 19h12

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