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 :

macro et makefile


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Par défaut macro et makefile
    Bonjour,
    j'ai écrit une bibliotheque mais j'ai un probleme:
    je voudrais que la variable MAX_PAGE_NUMBER soit
    déclarer dans le makefile.

    Voila mon makefile:
    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
     
     
    CC = gcc
    FLAGS = -ansi -ggdb3
     
    MAX_PAGE_NUMBER = 100000
     
    all: libmalloc.so libmalloc_deb.so memstat
     
    print-debug.o: print-debug.c print-debug.h
    	$(CC) $(FLAGS) -c print-debug.c
     
    alloc.o: alloc.c alloc.h
    	$(CC) $(FLAGS) -DMAX_PAGE_NUMBER $< -c alloc.c
     
    libmalloc_deb.so: alloc.o print-debug.o
    	$(CC) $(FLAGS) -DMAX_PAGE_NUMBER -ldl -shared alloc.o print-debug.c -o libmalloc_deb.so

    Le probleme est que dans mon programme, MAX_PAGE_NUMBER ne vaut pas 100000 mais 1!!!

    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, je crois (sans en être sûr) qu'il ne faut pas que tu mettes d'espace avant et après le signe =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MAX_PAGE_NUMBER=100000
    et n'y a-t-il pas une valeur max ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    je ne suis pas un expert en compilation mais lorsque je compile avec l'option -D c'est pour définir une compilation conditionnelle du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ARCH=LINUX # ou MAC ou WINDOWS
    blabla
     
    -D$(ARCH)
    vu ton Makefile, je ferais plutôt, dans le prgm, un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MAX_PAGE_NUMBER (100000)

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -DPAGE_NUMBER=$(PAGE_NUMBER)
    devrait faire ce que j'ai compris que tu veux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Par défaut
    #define MAX_PAGE_NUMBER (100000)


    J'avais fais comme ça aussi mais le prof a bien mentionné le makefile en disant:


    Le nombre maximal de pages que votre bibliothèque pourra utilisé sera défini par la macro MAX_PAGE_NUMBER. Celle-ci n'aura pas de valeur par défaut ; elle sera définie au moment de la compilation dans le fichier Makefile.


    donc je reste perplexe..

  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
    c'est absolument normal...

    Le -D définit uniquement une variable du style booléen.

    donc #ifndef TOTO

    marchera parce que par défaut TOTO vaudra 0.

    Mais si tu fais compile -DTOTO cela vaudra 1.

    Pour ce que tu veux faire, pas 36 000 solutions :

    • soit tu le mets en dur dans le programme
    • soit tu le remplaces par un 'sed' dans le binaire après la compilation.
    • soit tu le lis comme paramètre d'exécution.


    [EDIT]

    Grillé par J.Marc je ne connaissais pas cet usage...

    [/EDIT]

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Par défaut
    merci Jean-Marc.Bourguet pour ta réponse
    effectivement sa fonctionne très bien

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -DPAGE_NUMBER=$(PAGE_NUMBER)
    devrait faire ce que j'ai compris que tu veux.
    comment fonctionne ce code ?

    Voici mon script sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/sh
     
    MAX_PAGE_NUMBER=1000
     
    rm -f out
    gcc -Wall -W testpage.c -DMAX_PAGE_NUMBER=$(MAX_PAGE_NUMBER) -o out
    ./out
    suivi d'un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chmod u+x testpage.sh
    et voici mon code C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include<stdio.h>
    #include<stdlib.h>
     
    int main(void)
    {
      printf("MAX_PAGE_NUMBER = %d\n",MAX_PAGE_NUMBER);
      return 0;
    }
    et voici mes erreurs

    ./testpage.sh: line 6: MAX_PAGE_NUMBER: command not found
    testpage.c: Dans la fonction « main »:
    testpage.c:6: error: erreur de syntaxe before ')' token
    ./testpage.sh: line 7: ./out: Aucun fichier ou répertoire de ce type
    le seconde erreur doit découler de la 1e, mais d'où vient la 1e erreur ?

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Ce n'est pas de la syntaxe shell, c'est de la syntaxe makefile.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Ce n'est pas de la syntaxe shell, c'est de la syntaxe makefile.
    exact...

    donc voici mon Makefile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MAX_PAGE_NUMBER=1000
     
    gcc -Wall -W testpage.c -DMAX_PAGE_NUMBER=$(MAX_PAGE_NUMBER) -o out
    et là, j'ai maintenant l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    make: *** Pas de cibles. Arrêt.
    j'aimerais pouvoir faire fonctionner cette syntaxe. C'est une excellente idée ce que tu viens de dire sur ce post.

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    OK j'ai repris un autre prgm avec un Makefile et maintenant ça marche.
    Super cette idée !
    Merci

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    oui, j'avais trouvé ma boullette (j'ai posté trop rapidement mon message) et je ne suis pas arrivé à supprimer mon message (je m'étais bien rendu que j'avais écrit une grosse bêtise )

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

Discussions similaires

  1. Makefile enrichi et macro
    Par Malkavien dans le forum Débuter
    Réponses: 3
    Dernier message: 15/12/2009, 12h13
  2. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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