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 :

Pbm avec make & Makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Par défaut Pbm avec make & Makefile
    Bonjour,
    j'ai un Makefile que je voudrais adapter pour mon projet mais make me donne une erreur. voici l'original
    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
     
    CC=gcc
    CFLAGS=-c -Wall
    LDFLAGS=
    SOURCES=main.c hello.c factorial.c
    OBJECTS=$(SOURCES:.c=.o)
    EXECUTABLE=hello
     
    all: $(SOURCES) $(EXECUTABLE)
     
    $(EXECUTABLE): $(OBJECTS) 
    	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
     
    .c.o:
    	$(CC) $(CFLAGS) $< -o $@
    et la version adapté
    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
     
    CC=gcc
    CFLAGS=-c -Wall
    LDFLAGS=
    OBJDIR=obj/
    SRCDIR=src/
    SRCFILES=main.c hello.c factorial.c
    SOURCES=$(SRCDIR)$(SRCFILES:.c=.c)
    OBJECTS=$(OBJPATH)$(SRCFILES:.c=.o)
    EXECUTABLE=hello
     
    all: $(SOURCES) $(EXECUTABLE)
     
    $(EXECUTABLE): $(OBJECTS) 
    	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
     
    $(OBJECTS):
    	$(CC) $(CFLAGS) $< -o $@
    l'idée bien sur est d'avoir dans SOURCES ce qui suis src/main.c src/hello.c src/factorial.c
    et dans OBJECTS obj/main.o obj/hello.o obj/factorial.o

    mais le resultat est different dans OBJECTS il y a obj/main.o hello.o factorial.o
    quelqu'un a une idée de la maniere pour réaliser ce Makefile ?

    Merci

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 759
    Par défaut
    Salut,

    Quelle erreur te donne make ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Par défaut
    voici ce que j'ai comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    make: *** Pas de règle pour fabriquer la cible « obj/main.o », nécessaire pour « hello ». Arrêt.
    merci.

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Tu dois aussi adapter cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SRCFILES=main.c hello.c factorial.c
    En fonction de tes fichiers.c ou .cpp ...

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Par défaut
    Pardon je n'est pas bien saisi ce que tu veux dire par adapter cette ligne.
    au depart j'avais des fichiers sources que j'ai deplacé vers un repertoire src/ et je veux que les fichiers objets soient compilé et mis dans le repertoire obj/
    j'ai reussi a mettre dans SOURCES ceci /src/main.c /src/hello.c src/factorial.c
    et dans OBJECTS ceci obj/main.o obj/hello.o obj/factorial.o en modifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SOURCES = $(patsubst %, $(SRCDIR)%, $(SRCFILES))
    OBJ = $(SOURCES:.c=.o)
    OBJECTS=$(subst $(SRCDIR), $(OBJPATH), $(OBJ))
    mais le probleme reste le meme ici ce qui me cause des soucis c'est qu'il me dit qu'il ne sais pas comment fabrique obj/main.o qui est un composant de OBJECTS meme quand je modifie la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $(EXECUTABLE): $(OBJECTS) 
    	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
     
    $(OBJECTS):
    	$(CC) $(CFLAGS) $< -o $@
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $(EXECUTABLE): 
    	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
     
    $(OBJPATH)%o:$(SRCDIR)%c
    	$(CC) $(CFLAGS) $< -o $@
    bien sûr OBJPAH contient obj/ et SRCDIR = src/
    merci pour vos reponses

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Alors il manque peut être un / devant le obj des tes fichiers.o ...

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par CodeurNé Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(EXECUTABLE): 
    	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
    Ceci est incorrect, il faut conserver la dépendance sur $(OBJECTS) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(EXECUTABLE): $(OBJECTS)
    	$(CC) $(LDFLAGS) $^ -o $@
    Sinon, es-tu certain du contenu de $(OBJECTS) et $(SRCFILES) ?
    Personnellement, j'aurais plutôt utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SRCFILES= $(wildcard $(SRCDIR)/*.c)
    OBJECTS= $(patsubst $(SRCDIR)/%.c,$(OBJPATH)/%.o,$(SRCFILES))

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Par défaut
    merci pour ta reponse. c'est vrai que c'est plus facile de faire comme tu le conseille mais mon probleme c'est que dans le repertoires src/ il ya plusieurs fichiers *.c et je ne veux pas les inclure a ce stade du projet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(OBJPATH)%o:$(SRCDIR)%c
    	$(CC) $(CFLAGS) $< -o $@
    compile tout les fichiers c et je voudrais seulement choisir une parti parmi ces fichiers en mettant dans une variable la liste de ces fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(OBJPATH)%o:$(SOURCES)
    	$(CC) $(CFLAGS) $< -o $@
    mais ici ça compile mais tout les targets ont le meme contenu qui est cellui de main.o, donc ça ne compile que la premier depandence qui est ici src/main.c

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par CodeurNé Voir le message
    merci pour ta reponse. c'est vrai que c'est plus facile de faire comme tu le conseille mais mon probleme c'est que dans le repertoires src/ il ya plusieurs fichiers *.c et je ne veux pas les inclure a ce stade du projet.
    Dans ce cas un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SRCFILES= $(SRCDIR)/main.c $(SRCDIR)/hello.c $(SRCDIR)/factorial.c
    OBJECTS= $(patsubst $(SRCDIR)/%.c,$(OBJPATH)/%.o,$(SRCFILES))
    Devrait construire la liste qu'il te faut, le tout suivi par les règles de compilation et de link

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(EXECUTABLE): $(OBJECTS)
    	$(CC) $(LDFLAGS) $^ -o $@
     
    $(OBJPATH)%o:$(SRCDIR)%c
    	$(CC) $(CFLAGS) $< -o $@
    Attention, ce n'est pas testé mais dans le principe ça ne devrait pas être trop loin de ce que tu cherches.

Discussions similaires

  1. pbm avec setMinimumSize()
    Par toxyshow dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 26/11/2005, 18h30
  2. pbm avec les foreigns keys.....
    Par j_bonc dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/06/2004, 10h23
  3. Problème avec make menuconfig
    Par Kehel dans le forum Linux
    Réponses: 5
    Dernier message: 05/03/2004, 08h07
  4. [JB9][EJB]Compiler avec Make ou javac ?
    Par _gtm_ dans le forum JBuilder
    Réponses: 4
    Dernier message: 11/07/2003, 15h59
  5. Pbm avec les '&'...
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/08/2002, 11h08

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