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

Embarqué Discussion :

makefile : makedepend


Sujet :

Embarqué

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut makefile : makedepend
    Bonsoir,

    Je suis sur un projet qui comprend énormément de fichiers et j'aimerais savoir comment utiliser la commande "makedepend" dans 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
    MICRO=__mc9s12dp512
    MCUMASKSET=__ms4L00M
    TARGET=__ecuProto
    HARDVERSION=__hardV3
    SOFTTYPE=__functionalSoft
    DEFINES=$(TARGET) -d$(SOFTTYPE) $(Equipment) -d$(HARDVERSION) -d$(MICRO) -d$(MCUMASKSET)
    DEPFILE=.depends
    DEPTOKEN='\# MAKEDEPENDS'
    DEPFLAGS=-Y -f $(DEPFILE) -s $(DEPTOKEN) -p $(PROJET)/
    EXEC=ecuFS
    LDFLAGS=
    CFLAGS=-I/src -I../CLa485/src -I../common/src -I../common/srcCL -I../common/lib	-d$(DEFINES) -f$(PROJET).cxf -gck	
    CC=cx6812
    CLK=clnk6812
    SORTIE=ecuFS
    PROJET=ecu
    LKFDERIV=$(PROJET)FS
    SRCS=  \
        a485.c \
        a485Bit.c \
        a485Buf.c \
        a485Clav.c \
    #etc
        seatMeca.c \
        seatPpTst.c \
        vectors.c 
    SRCS_S = $(foreach srcs, $(SRCS), $(srcs) )
    OBJ=$(SRCS:.c=.o)
    OBJS_O = $(foreach obj, $(OBJS), $(OUTDIR)/$(obj) )
    
    all: $(EXEC)				#fichier executable final
    
    $(SORTIE): $(OBJ)			#link
    	@$(CLK) -m $(SORTIE).map -o $(SORTIE).h12 -sa -v $(LKFDERIV).lkf
    
    %.o : src\%.c				#compilation
    	@$(CC) -d$(DEFINES) -f$(PROJET).cxf -gck $<
    
    .PHONY: clean mrproper		#recontruction de dépendances
    
    clean:						#suppression des fichiers objets
    	@rm /obj/*.o
    
    mrproper: clean				#suppression de l'ancienne cible
    	@rm $(EXEC)
    
    depend:
    	del $(DEPFILE)
    	make $(DEPFILE)
    
    $(DEPFILE):
    	@echo $(DEPTOKEN) > $(DEPFILE)
    	makedepend $(DEPFLAGS) -- $(CFLAGS) -- $(SRCS)
    
    -include $(DEPFILE)
    Lorsque je compile sans les dépendances j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #error cp6812 src\a485Fct.c:681(25) missing prototype
    src\a485Fct.c:
    mingw32-make.exe: *** [a485Fct.o] Error 1
    Normal, mais au moins on sait que ça compile.

    Lorsque j'essaie de me servir de la commande makedepend en commentant l'include, et que j'appelle depend j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mingw32-make.exe depend 
    del .depends
    make .depends
    make[1]: Entering directory `C:/dev/EWorkspace/SeatNet/ECU'
    makedepend -Y -f .depends -s '# MAKEDEPENDS' -p ecu/ -- -I/src -I../CLa485/src -I../common/src -I../common/srcCL -I../common/lib	-d__ecuProto -d__functionalSoft  -d__hardV3 -d__mc9s12dp512 -d__ms4L00M -fecu.cxf -gck			 -- a485.c a485Bit.c a485Buf.c a485Clav.c a485Cmd.c a485Fct.c a485Status.c alim.c alim12vLsFct.c alim27vFct.c calib.c calibCan.c canCfg.c canChannel.c canCkCfg.c canCkMst.c canEcu.c canInit.c canMode.c canPMess.c canRcCal.c clavCdAt.c clavCdSp.c clavTbCmd.c clavTrt.c cna.c configLru.c configWk.c cycCan.c cycCanPt.c cycEdu.c cycEduB.c cycKdu.c cycLdu.c defAdc.c defClav.c defErr.c defIdent.c defTrace.c errBit.c escDebug.c escFct.c escParam.c escTrt.c escTst.c htr.c mode.c pmHard.c pmLrus.c pmSeat.c pmUtils.c portDrv.c rs485Gen1.c sciBuf.c sciCmd.c sciFct.c seat.c seatEvent.c seatKine.c seatMeca.c seatPpTst.c vectors.c 
    make[1]: Leaving directory `C:/dev/EWorkspace/SeatNet/ECU'
    process_begin: CreateProcess((null), makedepend -Y -f .depends -s "# MAKEDEPENDS" -p ecu/ -- -I/src -I../CLa485/src -I../common/src -I../common/srcCL -I../common/lib -d__ecuProto -d__functionalSoft -d__hardV3 -d__mc9s12dp512 -d__ms4L00M -fecu.cxf -gck -- a485.c a485Bit.c a485Buf.c a485Clav.c a485Cmd.c a485Fct.c a485Status.c alim.c alim12vLsFct.c alim27vFct.c calib.c calibCan.c canCfg.c canChannel.c canCkCfg.c canCkMst.c canEcu.c canInit.c canMode.c canPMess.c canRcCal.c clavCdAt.c clavCdSp.c clavTbCmd.c clavTrt.c cna.c configLru.c configWk.c cycCan.c cycCanPt.c cycEdu.c cycEduB.c cycKdu.c cycLdu.c defAdc.c defClav.c defErr.c defIdent.c defTrace.c errBit.c escDebug.c escFct.c escParam.c escTrt.c escTst.c htr.c mode.c pmHard.c pmLrus.c pmSeat.c pmUtils.c portDrv.c rs485Gen1.c sciBuf.c sciCmd.c sciFct.c seat.c seatEvent.c seatKine.c seatMeca.c seatPpTst.c vectors.c, ...) failed.
    make (e=2): Le fichier spécifié est introuvable.
    
    make[1]: *** [.depends] Error 2
    mingw32-make.exe: *** [depend] Error 2
    Et maintenant avec l'include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mingw32-make.exe depend 
    .depends:1: *** missing separator.  Stop.
    J'ai vérifier les tabulations/espaces, j'ai essayé de modifier les path, et les CFLAGS, rien à faire.

    Je travaille sur WindowsXP-32bits, j'utilise Eclipse-Indigo 3.7.1 avec le plugin CDT 8.0.2, j'ai MinGW version 3 il me semble, ma cible est un Freescale mc9s12md512 et son compilateur cx6812.

    Voila, si vous pouviez m'aider je vous en remercie.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut makefile : fonction foreach
    Bonjour,

    Autrement je voudrais savoir comment s'utilise la fonction foreach.

    Je dois rechercher dans les répertoires définis ma variable d'environnement PATH, un certain fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SEATNETADV_EXE_NAME=SeatNetADV_100025x.exe
    PATH_SEATNETADV_EXE=
    
    test::
    	foreach $$dir in ${PATH}
    		ifeq ($(wildcard $$dir/$(SEATNETADV_EXE_NAME)),)
    			$(PATH_SEATNETADV_EXE)=""
    		else
    			$(PATH_SEATNETADV_EXE)=$$dir
    		endif
    	done
    L'erreur que j'obtiens est la suivante :

    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
    **** Build of configuration Release for project SeatNet ****
    
    mingw32-make.exe test 
    foreach $dir in C:\dev\MinGW\bin;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\dev\Perforce;C:\dev\COSMIC\CX12;C:\dev\ULTRAE~1;C:\Program Files\QuickTime\QTSystem;C:\Program Files\COSMIC\EVAL12;c:\dev\cosmic\CX12\;C:\dev\SeatNetAdv;C:\dev\Perforce;C:\dev\Python27;C:\dev\GnuWin32\bin;C:\depots_perforce\GEN2\SAS\CODING\Tools\UnixUtils\;C:\dev\usr\bin;C:\dev\MinGW\msys\1.0\bin
    /usr/bin/sh: foreach: command not found
    /usr/bin/sh: C:/Program: No such file or directory
    /usr/bin/sh: C:/Program: No such file or directory
    /usr/bin/sh: C:/Program: No such file or directory
    /usr/bin/sh: C:WINDOWSsystem32: command not found
    /usr/bin/sh: C:WINDOWS: command not found
    /usr/bin/sh: C:WINDOWSSystem32Wbem: command not found
    /usr/bin/sh: C:Program: command not found
    /usr/bin/sh: C:devPerforce: command not found
    /usr/bin/sh: C:devCOSMICCX12: command not found
    /usr/bin/sh: C:devULTRAE~1: command not found
    /usr/bin/sh: C:Program: command not found
    /usr/bin/sh: C:Program: command not found
    /usr/bin/sh: c:devcosmicCX12;C:devSeatNetAdv: command not found
    /usr/bin/sh: C:devPerforce: command not found
    /usr/bin/sh: C:devPython27: command not found
    /usr/bin/sh: C:devGnuWin32bin: command not found
    /usr/bin/sh: C:depots_perforceGEN2SASCODINGToolsUnixUtils;C:devusrbin: command not found
    /usr/bin/sh: C:devMinGWmsys1.0bin: command not found
    mingw32-make.exe: *** [test] Error 127
    
    **** Build Finished ****
    Je continue de chercher mais si vous avez la solution, merci de me la donner.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Par défaut
    Bonjour, voilà les solutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #error cp6812 src\a485Fct.c:681(25) missing prototype
    Cela vient du fait que mes outils de compilation ne "prennent pas en compte" les énumérés : ce prototype est défini dans un ifdef qui teste une constante, celle-ci étant dans un énuméré, elle est sensé avoir la valeur de sa position dans l'énuméré. Dans mon cas, peut importe sa place, le compilateur la voit nulle.
    En définissant directement les constantes au lieu de les placer dans un énuméré, le problème disparaît. Pour info, voici les versions de mes outils :
    COSMIC HC12/HCS12 C Compiler:
    . 68HC12 C Cross Compiler V4.7.9 - 25 Jan 2008 - Win32-F
    . 68HC12 C Parser V4.8.5 - 19 Dec 2007 - Win32-F
    . 68HC12 Code Generator V4.7.9 - 25 Jan 2008 - Win32-F
    . 68HC12 Optimizer V4.6.14 - 25 Jan 2008 - Win32
    . 68HC12 Macro-Assembler V4.5.2 - 29 Oct 2007 - Win32-F
    . Linker V4.6.20 - 18 Dec 2007 - Win32-F
    . Hexa Translator V4.3.12 - 15 Nov 2007 - Win32

    Ensuite pour makedepend je l'ai abandonné puisque je me suis rendu compte que mon compilateur intégrait une option qui permet de faire les dépendances... Mais concernant l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make (e=2): Le fichier spécifié est introuvable.
    C'est parce que les chemins des "*.o" dans le fichier de dépendance étaient mauvais. J'ai donc rajouté une expression régulière a ma commande de création du fichier de dépendance pour corriger cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #mise à our des dépendances entre fichiers sources
    depend:
    	$(CC) $(INCLDIR) $(DEFINES) -sm $(ALL_SRCS) 2> NUL | \
    	sed -e "s/^\.\..*\/\([^\/]*.o\)/\.\.\/obj\/\1/" >$(DEPFILE)
    Enfin concernant le foreach, étant donné que l'on travaille en gestion de configuration, j'ai mis le chemin en dur. Au pire s'il ne trouve pas le fichier, l'erreur remontée par la compilation sera assez explicite pour debugger facilement.

    Tcho !

Discussions similaires

  1. Makefile et sed
    Par pitistef dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 10/02/2004, 16h06
  2. [Makefile] [Avancé]Récupération de dépendances
    Par Ruok dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 06/02/2004, 13h52
  3. [Debutant] Makefile
    Par Jfrancois57 dans le forum Systèmes de compilation
    Réponses: 8
    Dernier message: 26/01/2004, 14h18
  4. Makefile
    Par Wisefool dans le forum Systèmes de compilation
    Réponses: 2
    Dernier message: 03/11/2003, 18h41
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 12h30

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