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 :

Makefile enrichi et macro


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant SharePoint
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant SharePoint

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut Makefile enrichi et macro
    Bonjour,

    je suis sur un projet d'application (jusque là logique).

    j'ai pris l'habitude de ranger mes fichiers de façon logique, c'est à dire de cette manière :

    -Makefile
    -src/+
    |-*.c
    -inc/+
    |-*.h
    -obj/+
    |-*.o
    -lib/+
    |-*.a

    voici 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    ################################################################################
    ################################################################################
    #                Zone a personnaliser                   #
    ################################################################################
    ################################################################################
    ## Debug ? ##
    DEBUG    = yes
     
    ## Sources files ##
    SRC    = main.c
     
     
    ################################################################################
    ################################################################################
    #             /!\ Zone a ne pas toucher /!\                   #
    ################################################################################
    ################################################################################
    ## Directories ##
    DSRC    = ../src
    DINC    = ../inc
    DLIB    = ../lib
     
    ## Files ##
    OBJ    = ${SRC:.c=.o}
    INC    = ${SRC:.c=.h}
     
    ## Compil paths ##
    IPATH    = -I${DINC} -I.
    LPATH     = -L${DLIB}
     
    ## Librairies utilisees ##
    LIBS    = -lma_lib
     
    ## Flags ##
    WFLAGS    = -W -Wall -Wstrict-prototypes -ansi -pedantic
    .if ${DEBUG} == yes
    OPTI    = -g
    .else
    OPTI     = -O3
    .endif
    CFLAGS    = ${WFLAGS} ${OPTI} ${IPATH}
    LDFLAGS    = ${LPATH} ${LIBS}
     
    ## Binary used in Makefile ##
    CC    = gcc
    RM    = rm -f
    COMP    = gzip -f
    UNCOMP    = gunzip -f
     
    ## Gestions des couleurs ##
    RED    = printf '\033[0;31;40m'
    GREEN    = printf '\033[0;32;40m'
    YEL    = printf '\033[0;33;40m'
    BLUE    = printf '\033[0;34;40m'
    CYAN    = printf '\033[0;35;40m'
    TURQ    = printf '\033[0;36;40m'
    WHITE    = printf '\033[0;37;40m'
     
    ## Gestion des erreurs ##
    ERR    = ../.ccerr
     
    ## Targets ##
    TARGET     = asm
     
    all     : ${TARGET}
        @${GREEN}; echo; echo "Errors & Warnings: "
        @${RED};
        @cat ${ERR};echo
        @echo -n > ${ERR}
     
    ${TARGET} : ${OBJ}
        @${YEL}
        @echo "--------------------------------------------------------------------------------"
        @echo -n "Link edition : "
        @(((${CC} -o ../$@ ${OBJ} ${LDFLAGS}) 2>> ${ERR} && ${GREEN} && echo -n "DONE  ") || (${RED}; echo -n "FAILED"))
        @${YEL} && echo -n " ==> [" && ${WHITE} && echo -n "$@" && ${YEL} && echo "]"
     
     
    ${OBJ}     : ${SRC} ${INC}
        @${YEL}
        @echo -n "Compilation  : "
        @(((${CC} -c ${DSRC}/$< ${CFLAGS}) 2>> ${ERR}) && ${GREEN} && echo -n "DONE  ") || (${RED}; echo -n "FAILED")
        @${YEL} && echo -n " ==> [" && ${WHITE} && echo -n "$<" && ${YEL} && echo "]"
     
    ${SRC}     : ${INC}
     
    ${INC}    :
     
    ## Regles de nettoyage ##
    clean     :
        @${YEL};echo -n "Cleaning .... "
        @${RM} *~
        @${RM} \#*
        @${RM} *.o
        @${RM} ../*~
        @${RM} ../\#*
        @${RM} ${DSRC}/*~
        @${RM} ${DSRC}/\#*
        @${RM} ${DINC}/*~
        @${RM} ${DINC}\#*
        @${GREEN}; echo "DONE"
     
    fclean     : clean
        @${YEL};echo -n "Cleaning of ${TARGET} "
        @${RM} ${TARGET}
        @${GREEN}; echo "DONE"
     
    re     : fclean all
     
    ## Regles de compressiond des fichiers sources ##
    comp    : clean
        ${COMP} ${SRC} ${INC}
     
    uncomp     : 
        ${UNCOMP} ${SRC} ${INC}
    Petite précision, je suis sous FreeBSD, et l'un des mécanisme des Makefiles sous FreeBSD est de se placer dans le répertoire obj/ s'il existe.

    Mon problème étant que lorsque je fais la règle .c.o ou ${OBJ}:${SRC}, il ne sait pas regarder dans le bon répetoire (logique parce que je mets les noms des fichiers sans le répertoire. Cependant, je ne peux pas le mettre au nom des fichiers parce que sinon a cause de la règle
    je me retrouverais avec les .o dans le dossier src/ ...

    Y a-t-il un moyen de faire en sorte de changer le .c en .o mais aussi le src/ en obj/, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OBJ=${SRC:src/*.c=obj/*.o}
    J'ai déjà vu cette forme, mais je n'arrive pas à la retrouver...

    Merci d'avance de m'aider

  2. #2
    Membre averti
    Homme Profil pro
    .
    Inscrit en
    Décembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Fidji

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Décembre 2009
    Messages : 35
    Par défaut
    J'avais trouver une solution sans la regle .c.o, et la JE te dit man make

    .OBJDIR
    A path to the directory where the targets are built. At
    startup, make searches for an alternate directory to
    place target files. It will attempt to change into this
    special directory and will search this directory for
    makefiles not found in the current directory. The fol-
    lowing directories are tried in order:

    1. ${MAKEOBJDIRPREFIX}/`pwd`
    2. ${MAKEOBJDIR}
    3. obj.${MACHINE}
    4. obj
    5. /usr/obj/`pwd`

    The first directory that make successfully changes into
    is used. If either MAKEOBJDIRPREFIX or MAKEOBJDIR is set
    in the environment but make is unable to change into the
    corresponding directory, then the current directory is
    used without checking the remainder of the list. If they
    are undefined and make is unable to change into any of
    the remaining three directories, then the current direc-
    tory is used. Note, that MAKEOBJDIRPREFIX and MAKEOBJDIR
    must be environment variables and should not be set on
    make's command line.

    The make utility sets .OBJDIR to the canonical path given
    by getcwd(3).
    voila

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant SharePoint
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant SharePoint

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Par défaut
    Alors en fait,

    je l'ai lu et ça ne réponds pas à ma question....

    j'utilise d'ailleurs cette règle puisqu'il se déplace dans le dossier obj (cfl 4.obj).

    Donc, j'arrive à compiler, mais le problème, c'est qu'il recompile tout à chaque fois parce que de base il ne sait pas regarder dans le bon dossier

  4. #4
    Membre averti
    Homme Profil pro
    .
    Inscrit en
    Décembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Fidji

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Décembre 2009
    Messages : 35
    Par défaut
    Sinon j'avais essaye autre chose, au lieu du .c=.o, c'etait src/%..c=obj/%..o et pas sur mais sa devais marcher, le probleme est que le %..c=%..o n'est pas portable partout :s

Discussions similaires

  1. macro et makefile
    Par Didier77 dans le forum C
    Réponses: 12
    Dernier message: 11/05/2007, 17h17
  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, 17h32
  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, 13h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 04h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 13h13

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