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 :

[Makefile] rm automatique :(


Sujet :

Systèmes de compilation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut [Makefile] rm automatique :(
    Bonjour,

    je viens d'écrire ce makefile tout simple, qui me permet de créer les .exe correspondant aux .cpp :
    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
    GCC_C_FLAGS = -c -Wall -Werror -pedantic -pedantic-errors -std=c++98
    GCC_L_FLAGS = 
     
    CC = g++ $(GCC_C_FLAGS) $< -o $@
    LL = g++ $(GCC_L_FLAGS) $< -o $@
     
    SRC = $(wildcard *.cpp)
    OBJ = $(SRC:.cpp=.o)
    EXE = $(SRC:.cpp=.exe)
     
    all: $(EXE)
    	@echo --- --- Tous les executables ont ete crees --- ---
     
    %.exe: %.o
    	@$(LL)
    	@echo "- $@"
     
     
    %.o: %.cpp
    	@$(CC)
     
    clean:
    	rm -f *.o
     
    distclean: clean
    	rm -f *.exe
    Mais le résultat n'est pas tout à fait celui que j'attendais, quand je tapes make (avec juste le Makefile et les .cpp présents) voilà ce que ça donne :
    $ make
    - ex1.exe
    - ex2.exe
    --- --- Tous les executables ont ete crees --- ---
    rm ex1.o ex2.o
    $
    Je ne vois pas d'où vient ce rm ... Et d'ailleurs ce n'est pas juste un bug d'affichage, les .o sont bien effacés.


    Si quelqu'un a une idée ... je suis perplexe là.

    ps: je me demande aussi comment ne pas utiser l'extension .exe pour les éxécutables, tout en gardant la génération automatique de tous les executables

  2. #2
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Ça fait longtemps que je n'ai pas fait de makefile, mais:
    - a priori ce n'est pas ton 'clean' qui fait le rm (t'aurais rm -f et non rm ex1.o ex2.o)
    - si tu fait "make all" as-tu le meme comportement ?
    - tu peux lancer make en mode debug (-d voire --debug=<flag>, cf man make) et il devrait t'afficher la liste des règles qu'il a appliqué

  3. #3
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    make all c'est pareil,
    par contre avec -d il y a un paquet d'infos de debug, et voilà les 3 dernières lignes :

    Refabrication du fichier cible « all » réussie.
    Suppression des fichiers intermédiaires...
    rm ex3.o ex1.o ex2.o
    Ça veut dire qu'il se rend compte tout seul que .exe ne dépend que d'un .o qui lui même ne dépend que d'un .cpp, donc il pense qu'il peut virer le .o pour gérer les états de mises à jour?
    Si c'est ça, c'est bizarre. Et dans ce cas comment je fais pour garder les .o?


    ps: attention derrière toi un singe à 3 têtes...

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Le clean est visiblement exécuté automatiquement.
    Rajoute un @echo "Cleaning" à clean pour voir.

  5. #5
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Citation Envoyé par MatRem
    Ça veut dire qu'il se rend compte tout seul que .exe ne dépend que d'un .o qui lui même ne dépend que d'un .cpp, donc il pense qu'il peut virer le .o pour gérer les états de mises à jour?
    Exact, avec GNU make, il considere le .o comme etant un fichier intermediaire qu'il peut donc effacer.

    Citation Envoyé par MatRem
    Si c'est ça, c'est bizarre. Et dans ce cas comment je fais pour garder les .o?
    En rajoutant une regle .PRECIOUS qui depend de ton/tes fichiers que tu veux garder.

    ps: attention derrière toi un singe à 3 têtes...

    tu as une banane dans la poche ou tu es content de me voir ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    mais non..

    pour des cibles (target) il faut :: et non : ..

    Donc

    clean::

    ensuite, en général on ne met pas

    all : $(EXE)

    où $(EXE) ne correspond pas à une cible mais à une instruction...


    C'est :

    all : Make_Exe

    Make_Exe :: $(EXE)

  7. #7
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Super, merci D[r]eadLock .

    Par contre c'est bizarre je n'ai jamais eu ce soucis de rm automatique des .o auparavant... Il devait toujours y avoir un intérêt de garder les .o pour la gestion des "up to date".


    Citation Envoyé par Alp
    Le clean est visiblement exécuté automatiquement.
    C'est ce que je croyais au début, mais non.

    Citation Envoyé par souviron34
    mais non..
    Mais non quoi?


    Citation Envoyé par souviron34
    pour des cibles (target) il faut :: et non : ..
    Ça sert à quoi :: ? J'ai toujours mis : moi


    Citation Envoyé par souviron3
    ensuite, en général on ne met pas

    all : $(EXE)

    où $(EXE) ne correspond pas à une cible mais à une instruction...

    C'est :

    all : Make_Exe

    Make_Exe :: $(EXE)
    Heu j'avoues que là je vois pas l'intérêt, surtout que $(EXE) n'a rien d'une instruction, c'est juste la liste des .exe.
    En plus je doute que make me laisse placer une instruction à la place d'une dépendance... si?

Discussions similaires

  1. Code::Blocks makefile automatique
    Par Shaiky dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 22/04/2009, 07h25
  2. recherche makefile automatique
    Par zais_ethael dans le forum C
    Réponses: 6
    Dernier message: 10/02/2008, 00h01
  3. Création d'un makefile pour compilation automatique
    Par freestyler dans le forum Delphi
    Réponses: 48
    Dernier message: 08/06/2007, 14h47
  4. makefile automatique ou manuel
    Par julien.63 dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 22/05/2007, 09h08
  5. makefile automatique ou manuel
    Par julien.63 dans le forum C
    Réponses: 0
    Dernier message: 17/05/2007, 12h34

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