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 :

Make et clean ?


Sujet :

Systèmes de compilation

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut Make et clean ?
    Bonjour,

    Je débute avec les makefiles aussi j'ai récupéré un exemple
    d'un tutorial que j'ai réadapté. Celà donne 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
    24
    25
    26
    27
    28
    29
    30
    31
     
    SRC = main.cpp drawbox.cpp hrzscrlbr.cpp vrtscrlbr.cpp \
          main.h drawbox.h hrzscrlbr.h vrtscrlbr.h
     
    OBJ = $(SRC:.cpp=.o)
     
    EXE = scrollbar.exe
     
    CC = g++
     
    CFLAGS = -Wall 
     
    LFLAGS = -mwindows -lfltk -lole32 -luuid -lcomctl32 -lwsock32 -lm
     
    %.o: %.cpp *.h
    	$(CC) $(CFLAGS) -c $(<) -o $(@)
     
    all: compile
     
    compile: $(EXE)
     
     
    $(EXE): $(OBJ)
    	$(CC) $(OBJ) $(LFLAGS) -o $(EXE)
     
     
    strip: $(EXE)
    	strip --strip-all $(EXE)
     
    clean:
    	del $(OBJ)
    Le programme se compile normalement et tout semble fonctionner.
    Mais le truc que je n'arrive pas a assimiler c'est la règle clean.
    Partout je lis que ça supprime les fichiers objet sauf que :

    1) Chez moi ça marche pas. J'ai beau taper "make" ou "make clean", les
    fichiers objets sont toujours présents dans le répertoire.

    2) Je ne comprend pas le but de l'effacement des fichier objets. Comment
    va faire make ensuite pour savoir quel fichier doit être recompilé ou pas
    s'il n'a plus le fichier objet pour comparer ?

    Voilà, pardon pour la naïveté de ma question mais si quelqu'un
    pouvait éclairer ma lanterne.


    Merci

  2. #2
    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
    1) Chez moi ça marche pas. J'ai beau taper "make" ou "make clean", les
    fichiers objets sont toujours présents dans le répertoire.
    Tu lances make depuis quel environnement ? del est la commande pour supprimer des fichiers dans l'interpréteur de commande de windows. Si tu lances depuis un environnement Cygwin, ça ne marchera pas. Il faut utiliser rm à la place.
    Ensuite, seul make clean permet d'effacer les fichiers, pas make, la commande make étant équivalent à make all.

    2) Je ne comprend pas le but de l'effacement des fichier objets. Comment va faire make ensuite pour savoir quel fichier doit être recompilé ou pas s'il n'a plus le fichier objet pour comparer ?
    C'est bien pour cela que cette règle doit être appelée spécifiquement par make clean. Tu l'appelles quand tu as besoin de faire le ménage mais bien sûr elle ne doit pas toujours être appelé sinon on serait à chaque fois obliger de recompiler tout le projet, ce qui n'est pas le but d'un Makefile.

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Merci pour ta réponse.

    Tu lances make depuis quel environnement ?
    Windows XP et Mingw. Je lance le make en mode console, la commande
    del est donc bien appropriée.
    J'ai quand même essayé rm au cas où mais ça ne marche pas.
    Quand je lance "make clean" j'obtiens:
    mingw32-make: Nothing to be done for all.
    Je ne comprends pas d'où vient ce pb. Mon makefile a pourtant
    l'air correcte non ?

  4. #4
    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
    Tape directement la commande qui permet d'effacer les fichiers .o. Comme ça tu sauras celle qu'il faut utiliser dans le Makefile.

    Ton message est normal. L'exécutable a été généré, les sources n'ont pas été modifiées. make n'a donc rien à faire. Par contre, la commande est louche, ça devrait être make all. A moins que tu ais changé ta règle clean.

    Je ne vois pas d'erreur particulier dans le Makefile.

  5. #5
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Tape directement la commande qui permet d'effacer les fichiers .o. Comme ça tu sauras celle qu'il faut utiliser dans le Makefile.
    Quans je tape del *.o directement, les fichiers objet sont
    effectivement bien effacés. C'est donc la bonne commande.
    Par contre make clean ne veut rien savoir. Les fichiers ne
    sont pas effacés.... bizzare !

  6. #6
    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
    Quand tu fais make clean, tu vois bien la commande del s'afficher ?
    A priori tout a l'air bon. Les tabulations sont bonnes.

  7. #7
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Quand tu fais make clean, tu vois bien la commande del s'afficher ?
    Non, il n'y a que le message de make qui s'affiche.
    mingw32-make: Nothing to be done for all.

  8. #8
    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
    Tu pourrais joindre ton Makefile. Pas le copier le joindre. J'ai vu que certaines lignes vides comportent en fait quelques espaces. Il ne devrait pas y avoir de tels espaces juste un retour à la ligne.

    S'il te dit nothing for all, c'est que la règle all est à jour. Sauf que tu appelles la règle clean... Ce n'est pas normal.

  9. #9
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Y a du neuf !
    J'ai fais un test avec MSYS en changeant la commande d'effacement
    dans le makefile:
    clean:
    rm *.o
    et là ça marche. Les fichiers .o sont bien effacés et "rm *.o"
    s'affiche lorsque je lance le make clean.
    Donc ça doit être un pb avec mingw et le mode console de
    Windows. Ce qui est bizzare c'est que make est bien reconnu
    et exécuté. Alors pourquoi pas make clean ?

  10. #10
    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
    Juste en changeant la commande d'effacement. Rien d'autre ?

    Je ne pourrais pas te dire. Je n'utilise jamais la console windows. Mais maintenant j'ai le souvenir que quand tu installes MinGW puis MSYS, MSYS vérifie la version de make que tu utilises. Faut-il une version de make spécifique à la console ? Je ne pense pas quand même.

  11. #11
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Juste en changeant la commande d'effacement. Rien d'autre ?
    Non, rien d'autre.

    Bon, c'est bizzare cette histoire. D'un autre coté c'est pas
    trés grave. Si je veux supprimer les fichiers .o Je fais un
    del *.o directement de la console. Mais j'aime bien savoir
    pourquoi un truc marche pas. Je chercherai plus tard.
    En tous cas merci beaucoup pour ton aide et bonne soirée

Discussions similaires

  1. make pas de règle pour fabrique la cible clean
    Par sousoux dans le forum Linux
    Réponses: 11
    Dernier message: 09/12/2014, 10h20
  2. question sur le make clean
    Par BigBarbare dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 03/05/2007, 10h39
  3. [CDT] problème de build et compil (make -k)
    Par Prodejeu dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 02/11/2004, 23h18
  4. Problème avec make menuconfig
    Par Kehel dans le forum Linux
    Réponses: 5
    Dernier message: 05/03/2004, 08h07
  5. [JB9][EJB]Compiler avec Make ou javac ?
    Par _gtm_ dans le forum JBuilder
    Réponses: 4
    Dernier message: 11/07/2003, 15h59

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