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 :

probleme avec make


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut probleme avec make
    salut,

    je suis en train d'esayer de faire mon premier makefile. J'ai lu le tutoriel de gl, et d'autres tutoriels, mais je n'y arrive pas.
    Mon projet est constitué de 4 fichiers .c :
    f1.c, f2.c, f3.c et main.c
    main.c utilise f3.c.
    f3.c utilise f1.c et f2.c.
    Voici ce que j'ai fait, et qui ne marche pas :
    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
    CC = gcc
    CFLAGS = -W -Wall -ansi -g
    LDFLAGS =
    EXEC = programme
     
    all: $(EXEC)
     
    programme: f3.o main.o
    	$(CC) $(CFLAGS) $+ -o $@
     
    main.o: main.c
    	$(CC) $(CFLAGS) -c $< -o $@
     
    f3.o: f2.o f1.o f3.c
    	$(CC) $(CFLAGS) -c $< -o $@
     
    f2.o: f2.c
    	$(CC) $(CFLAGS) -c $< -o $@
     
    f1.o: f1.c
    	$(CC) $(CFLAGS) -c $< -o $@
     
    clean:
    	rm -rf *.o
     
    mrproper: clean
    	rm -rf $(EXEC)


    peut on m'aider à le corriger et l'améliorer ?
    Merci

  2. #2
    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.

    Avant de rafiner ton Makefile essayes de le faire fonctionner correctement : la cible ALL est inutile ... ta cible principale est programme dont les cibles qui suivent sont des dépendances ...

    Un exemple de Makefile qui marcherait avec ton projet :

    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
    compilo = gcc
    options = -Wall -Wextra # ...
     
    prog : main f3 f2 f1
        $(compilo) $(options) main.o f3.o f2.o f1.o -o programme
    main: f3
        $(compilo) -c main.c $(options) -o main.o
    f3: f2 f1
        $(compilo) -c f3.c $(options) -o f3.o
    f2:
        $(compilo) -c f2.c $(options) -o f2.o
    f1:
        $(compilo) -c f1.c $(options) -o f1.o
    clean:
        rm -rf *.o

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut
    Tu as changer certains noms et je suis perdu, ça donne quoi en laissant les mêmes noms (et abbréviations) que dans le tuto ?

  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
    Citation Envoyé par KateA Voir le message
    Tu as changer certains noms et je suis perdu, ça donne quoi en laissant les mêmes noms que dans le tuto ?
    Je l'ai fait exprès ... ces noms sont des noms de variables ou de cibles qui peuvent être n'importe quoi. On retrouve bien souvent les mêmes noms dans les Makefile et je tenais à te faire comprendre que ce n'est pas fixe.

    Il faut bien comprendre qu'un Makefile (minimal) s'écrit de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cible: dépendances
        commandes
    Les dépendances sont en générale des cibles et les commandes peuvent être raccourcies par des variables tel que CC pour pouvoir limiter les modifications (par exemple si on veut changer de compilo).

    As-tu essayé de faire make avec ce Makefile ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 60
    Par défaut
    oui ça marche, mais je ne sais pas pourquoi, et je n'arrive pas à l'adapter au cas plus compliqué avec des variables internes.

  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
    Voici un petit résumé :

    Un Makefile est un fichier qui sert à simplifier certaines tâches de construction tel que la compilation d'un projet (qui peut se faire entièrement à la ligne de commande).

    Ex : pour ton projet, tu pourrait exécuter dans l'ordre ces commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gcc -c f1.c -Wall -Wextra -o f1.o
    gcc -c f2.c -Wall -Wextra -o f2.o
    gcc -c f3.c -Wall -Wextra -o f3.o
    gcc -c main.c -Wall -Wextra -o main.o
    gcc main.o f3.o f2.o f1.o -o programme
    Pour éviter de faire tout cela sur chaque poste où l'on doit compiler ce programme, on utilise un Makefile.

    Le Makefile se décompose en cibles définies de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cible: dépendances
        commandes
    Avec ce projet un comme le tient un, un Makefile minimal donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    prog : main f3 f2 f1
        gcc main.o f3.o f2.o f1.o -o programme
    main: f3
        gcc -c main.c -Wall -Wextra -o main.o
    f3: f2 f1
        gcc -c f3.c -Wall -Wextra -o f3.o
    f2:
        gcc -c f2.c -Wall -Wextra -o f2.o
    f1:
        gcc -c f1.c -Wall -Wextra -o f1.o
    La commande make exécute la première cible qui exécute en premier ses dépendances (qui exécutent d'abord leurs dépendances et ainsi de suite) ... pour fabriquer une cible en particulier, on fait make NomDeLaCible.

    Pour simplifier les commandes, on peut utiliser des variables de la même façon qu'en Bash ... exemple :

    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
    # variables :
    compilo = gcc
    options = -Wall -Wextra # ...
     
    # cibles :
    prog : main f3 f2 f1
        $(compilo) $(options) main.o f3.o f2.o f1.o programme
    main: f3
        $(compilo) -c main.c $(options) -o main.o
    f3: f2 f1
        $(compilo) -c f3.c $(options) -o f3.o
    f2:
        $(compilo) -c f2.c $(options) -o f2.o
    f1:
        $(compilo) -c f1.c $(options) -o f1.o
    Enfin, tu peut ajouter d'autres cibles à l'exemple de clean (une cible peut contenir n'importe quelle commande).

    Après, on peut ajouter des conditions, des raccourcis ... bref, c'est tout un langage (voir dans les tutos).

    C'est un peu plus clair ?

Discussions similaires

  1. probleme avec make
    Par vince-29 dans le forum Qt
    Réponses: 8
    Dernier message: 29/01/2009, 11h37
  2. Probleme de make avec uClinux
    Par DrTank dans le forum Linux
    Réponses: 4
    Dernier message: 26/01/2008, 20h51
  3. Probleme avec Make -->[all-recursive] Erreur 1
    Par lolodelp dans le forum Installation
    Réponses: 3
    Dernier message: 18/04/2006, 23h41
  4. Problème avec la commande MAKE
    Par julio26 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 30/04/2005, 20h48
  5. Problème avec make menuconfig
    Par Kehel dans le forum Linux
    Réponses: 5
    Dernier message: 05/03/2004, 08h07

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