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 :

[GNU Makefile, débutant] Suppression de fichier inattendue à la fin de la compilation


Sujet :

Systèmes de compilation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 15
    Points : 17
    Points
    17
    Par défaut [GNU Makefile, débutant] Suppression de fichier inattendue à la fin de la compilation
    Bonjour,

    Je débute sur l'utilisation de la bibliothèqe boost test, qui est une bibliothèque de test unitaire. J'ai adopté la convention suivante : les fichiers de tests se termine par _test.

    Pour générer les exécutable de test, j'ai utilisé la règle suivante :
    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %_test: %_test.o $(CXX_BIN) 
    	$(CXX) $(CXXFLAGS) -o $@ $^  $(LIBS) -lboost_test_exec_monitor 
    	./$@
    CXX est le compilateur C++, CXXFLAGS est vide et LIBS appelle les bilbliothèques nécessaires à la compilation.

    Le problème rencontré, c'est que lorsque cette règle est appelée, le test est exécuté, mais il s'ensuit une commande rm. Pour mieux comprendre l'enchainement je vous ajoute la sortie du Makefile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    g++  -c fileutils.cxx
    g++  -c fileutils_test.cxx
    g++  -o fileutils_test fileutils_test.o fileutils.o  -lopencv_core -lopencv_highgui -lboost_test_exec_monitor 
    ./fileutils_test
    Running 1 test case...
     
    *** No errors detected
    rm fileutils_test.o
    Au besoin, je vous laisse le Makefile complet si vous voulez en savoir plus.
    Code Makefile : 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
    32
    33
    34
    35
    36
    37
    # On compile avec g++ en chargeant les 
    # bibliothèques d'opencv et on défini les
    # fichiers à compiler.
    CXX       = g++
    CXXFLAGS +=
    LIBS      = -lopencv_core -lopencv_highgui
     
    EXEC      = programme
    CXX_PREFIX= \
    	fileutils 
    CXX_BIN   = $(addsuffix .o, $(CXX_PREFIX))
     
    # Règles pour les exécutables
    all: $(EXEC)
     
    run: all
    	./$(EXEC)
     
    $(EXEC): $(CXX_BIN) main.o
    	$(CXX) $(CXXFLAGS) -o $@ $^  $(LIBS)
     
    # Règles pour les tests
    test: fileutils_test
     
    %_test: %_test.o $(CXX_BIN) 
    	$(CXX) $(CXXFLAGS) -o $@ $^  $(LIBS) -lboost_test_exec_monitor 
    	./$@
     
    # Règle pour passer compiler un fichier C++
    .cxx.o:
    	$(CXX) $(CXXFLAGS) -c $<
     
    # No comment
    clean: 
    	rm -f *.o
    .PHONY: all run clean test
    .SUFFIXES: .cxx .o

    Quelqu'un a-t-il une idée de la provenance de la commande rm ? Par ailleurs, j'accepte avec plaisir toutes vos remarques concernant le Makefile, étant encore débutant dans le domaine.

    Merci d'avance.

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

    make va utiliser une règle implicite pour fileutils_test.o, du coup il considère ce fichier comme un fichier intermédaire et l'effacera à la fin -> la doc makefile à ce sujet.
    Si tu désires garder ces fichiers il va falloir utiliser les cibles spéciales comme .SECONDARY ou .PRECIOUS.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Arf, c'était bien une erreur de débutant...

    J'avais compris que les règles générique (%.o : %.c) fonctionnait comme les règles implicites (.o.c:).

    Merci beaucoup ! Je connaissais pas non plus les cibles SECONDARY ou PRECIOUS.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/02/2011, 16h50
  2. [Débutant]Suppression retour chariot dans un fichier texte.
    Par Baban29 dans le forum Entrée/Sortie
    Réponses: 22
    Dernier message: 18/04/2008, 12h05
  3. Débutant - Suppression de lignes dans un fichier
    Par Mil17 dans le forum Langage
    Réponses: 1
    Dernier message: 20/11/2007, 17h08
  4. Auto suppression de fichier
    Par pato dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2004, 09h09
  5. Suppression de fichiers
    Par wasch dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2003, 16h37

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