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 :

Comment utiliser -DDEBUG du Makefile et les directives du préprocesseur ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut Comment utiliser -DDEBUG du Makefile et les directives du préprocesseur ?
    Bonsoir, je voudrais utiliser -DDEBUG qui est dans mon Makefile et que cela ait une incidence sur les directives du préprocesseur dans les fichiers *.c

    Ce que je voudrais faire, c'est si dans un .c j'ai un assert ou un printf, lors de la compilation finale les assert et les messages soient désactivés.

    Donc par exemple si j'ai dans mon Makefile j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COPTS = -c -g -W -Wall -Werror -pedantic -O3 -DDEBUG
    en mettant -DDEBUG le message de mon .c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifdef DEBUG
      printf("w=%d / h=%d",board->w,board->h);
    #endif
    je voudrais qu'il soit désactivé. Mais si je met -DEBUG je réactive mon printf.
    Le problème c'est que cela ne marche pas.


    Merci par avance pour votre aide.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hbx360 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPTS = -c -g -W -Wall -Werror -pedantic -O3 -DDEBUG
    Bonjour

    Ca ne fonctionnera que si tu indiques, dans ton Makefile, qu'il faut utiliser la variable "COPTS" lorsque tu compiles.

    Comme tu as mis l'option "-c", ça veut dire que tu veux générer un ".o" donc tu dois écrire la règle de création d'un ".o" à partir d'un ".c"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .c.o:
    	$(CC) $(COPTS) $< -o $@

    Maintenant, il faut la règle pour générer un exécutable à partir d'un ".o"
    Et si tu veux passer directement du ".c" à l'exécutable, il faut alors là aussi écrire une règle. Tu peux alors regrouper les deux règles précédentes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .c:
    	$(CC) $(COPTS) $< -o $*.o
    	$(CC) $*.o -o $@
    	rm -f $*.o
    Mais ça oblige ensuite, si une des options change, de la reporter partout où elle est utilisée. Tu peux sinon indiquer au Makefile de se réutiliser lui-même pour générer d'abord le ".o" puis l'exécutable à partir du ".o"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .c:
    	$(MAKE) $*.o
    	$(MAKE) $@
    	rm -f $*.o
    Et dans ce cas, quand le Makefile rappelle make, il utilise alors les règles déjà écrites pour les opérations demandées.

    Plus de détails sur le Makefile ici.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Merci Sve@r pour ton aide mais en faite ce que je veux c'est pouvoir utiliser -DEBUG ou -DDEBUG que j'ai mis dans mon COPTS pour activer ou désactiver le printf comme indiquer dans mon premier message.

    Apparement le DEBUG du lien que tu m'as donné concerne uniquement le makefile ce que je voudrais c'est qu'on puisse l'utiliser dans un .c ou un .h

    Mon Makefile est comme suite :

    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
     
     
    CC=gcc
    COPTS = -c -g -W -Wall -Werror -pedantic -O3 -DEBUG
    OBJS=main.o global.o init_SDL.o event.o  loadSprites.o tools.o
     
    life : $(OBJS)
    	$(CC) $(OBJS) -o life -L/usr/local/lib -lSDLmain -lSDL
     
    main.o : main.c global.h init_SDL.h event.h loadSprites.h tools.h
    	$(CC) $(COPTS) main.c
     
    global.o : global.c global.h tools.h init_SDL.h event.h
    	$(CC) $(COPTS) global.c
     
    init_SDL.o : init_SDL.c init_SDL.h tools.h
    	$(CC) $(COPTS) init_SDL.c
     
    event.o : event.c event.h tools.h
    	$(CC) $(COPTS) event.c
     
    loadSprites.o : loadSprites.c loadSprites.h tools.h
    	$(CC) $(COPTS) loadSprites.c
     
    tools.o : tools.c tools.h
    	$(CC) $(COPTS) tools.c
     
    clean :
    	rm -f *.o *~ *.stackdump *.exe \#*\#

  4. #4
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour
    -DEBUG définit la macro EBUG, pour ce que tu veux faire il faut un -DDEBUG.

    C'est un flag destiné au préprocesseur, ces flags sont généralement mis dans la variable CPPFLAGS pour pouvoir bénéficier des avantages des règles automatiques.

    Tu pourrais changer d'optique et préférer d'utiliser une macro NDEBUG, en gros faire le contraire de ce que tu fais. Cela est intéressant dans le sens que cette macro est utilisé par la libc pour les assert.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par picodev Voir le message
    ...pour ce que tu veux faire il faut un -DDEBUG.
    En plus il l'avait bien mis ainsi dans son premier message (j'y avais pensé aussi et avais alors bien checké le truc)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Merci pour votre aide.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2013, 22h21
  2. comment utilisé svmtrain avec les matrices ?
    Par red4000 dans le forum MATLAB
    Réponses: 0
    Dernier message: 21/02/2013, 21h20
  3. comment utilisé les macros en c?
    Par ryuphenix dans le forum C
    Réponses: 3
    Dernier message: 20/03/2011, 14h20
  4. [Servlet] Comment utilisé une servlet plusieurs fois ?
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 03/06/2004, 14h49
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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