• [^] # Re: suite : evolution

    Posté par . En réponse au message problèmes de link C++. Évalué à 0.

    dans cette application le makefile est morcellé en plusieurs fichiers.
    je ne suis pas à l'origine de cette architecture compliquée !

    makefile --linux.mk---Makfile.mk--
    | | +--projarch.mk
    | +-tools.mk
    + objects1.mk
    + objects2.mk
    + objects3.mk
    ....

    j'espère que c'est (un peu!) clair...


    makefile

    #===============================================================
    #
    # Makefile de tests :
    #
    # Compilation des modules d'entree applicatif, et
    # surtout Editions de Liens : pour Unix ou pour VxWorks
    # suivant les target de make
    #
    #===============================================================
    #===============================================================
    # VALEUR PAR DEFAUT DE LA VARIABLE DE PLATEFORME CIBLE
    #===============================================================
    #CIBLE = VxWorks
    CIBLE = Linux
    #===============================================================
    cible_defaut_test: pirrat

    include ${RACINE}/${ND_MAKEFILES}/${CIBLE}.mk

    #===============================================================
    #===============================================================
    #===============================================================
    LIB_BASENAME = ${NS_CPPBOOCH}
    include ${RACINE}/${ND_CATEGORIES}/${NS_CPPBOOCH}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_SUPPORT}
    include ${RACINE}/${ND_CATEGORIES}/${NS_SUPPORT}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_MATH}
    include ${RACINE}/${ND_CATEGORIES}/${NS_MATH}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_MESURES}
    include ${RACINE}/${ND_CATEGORIES}/${NS_MESURES}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_COMPOSANTS}
    include ${RACINE}/${ND_CATEGORIES}/${NS_COMPOSANTS}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_NOYAU}
    include ${RACINE}/${ND_CATEGORIES}/${NS_NOYAU}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_FILTRES}
    include ${RACINE}/${ND_CATEGORIES}/${NS_FILTRES}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_COMMANDES}
    include ${RACINE}/${ND_CATEGORIES}/${NS_COMMANDES}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_INTERFACE}
    include ${RACINE}/${ND_CATEGORIES}/${NS_INTERFACE}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_VORTEX}
    include ${RACINE}/${ND_CATEGORIES}/${NS_VORTEX}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_GENERATEURS}
    include ${RACINE}/${ND_CATEGORIES}/${NS_GENERATEURS}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_REPARTITEURS}
    include ${RACINE}/${ND_CATEGORIES}/${NS_REPARTITEURS}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_CONTROLEUR}
    include ${RACINE}/${ND_CATEGORIES}/${NS_CONTROLEUR}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_OBSERVATEURS}
    include ${RACINE}/${ND_CATEGORIES}/${NS_OBSERVATEURS}/objects.mk
    #===============================================================
    LIB_BASENAME = ${NS_DIALOGUE}
    include ${RACINE}/${ND_CATEGORIES}/${NS_DIALOGUE}/objects.mk
    #===============================================================
    LIB_BASENAME = Probleme_dans_makefile_test_sur_LIB_BASENAME
    #===============================================================
    #===============================================================


    #===============================================================
    # TOUS LES OBJETS A LINKER
    #===============================================================
    # LSUB: localisation des sous-systemes
    LSUB = ${RACINE}/${ND_CATEGORIES}
    #===============================================================
    TOUS_LES_OBJETS = \
    ${OBJ_${NS_CPPBOOCH}:%=${LSUB}/${NS_CPPBOOCH}/%} \
    ${OBJ_${NS_SUPPORT}:%=${LSUB}/${NS_SUPPORT}/%} \
    ${OBJ_${NS_MATH}:%=${LSUB}/${NS_MATH}/%} \
    ${OBJ_${NS_MESURES}:%=${LSUB}/${NS_MESURES}/%} \
    ${OBJ_${NS_COMPOSANTS}:%=${LSUB}/${NS_COMPOSANTS}/%} \
    ${OBJ_${NS_NOYAU}:%=${LSUB}/${NS_NOYAU}/%} \
    ${OBJ_${NS_FILTRES}:%=${LSUB}/${NS_FILTRES}/%} \
    ${OBJ_${NS_COMMANDES}:%=${LSUB}/${NS_COMMANDES}/%} \
    ${OBJ_${NS_INTERFACE}:%=${LSUB}/${NS_INTERFACE}/%} \
    ${OBJ_${NS_VORTEX}:%=${LSUB}/${NS_VORTEX}/%} \
    ${OBJ_${NS_REPARTITEURS}:%=${LSUB}/${NS_REPARTITEURS}/%}\
    ${OBJ_${NS_GENERATEURS}:%=${LSUB}/${NS_GENERATEURS}/%} \
    ${OBJ_${NS_CONTROLEUR}:%=${LSUB}/${NS_CONTROLEUR}/%} \
    ${OBJ_${NS_OBSERVATEURS}:%=${LSUB}/${NS_OBSERVATEURS}/%} \
    ${OBJ_${NS_DIALOGUE}:%=${LSUB}/${NS_DIALOGUE}/%} \

    #-------------------- LAISSER LE SAUT DE LIGNE -----------------
    #===============================================================


    ################################################################
    ################################################################
    ################################################################
    ################################################################


    #===============================================================
    #===============================================================
    LIB_NAMES = ${NS_GENERATEURS}.${ELIB} \
    ${NS_VORTEX}.${ELIB} \
    ${NS_COMMANDES}.${ELIB} \
    ${NS_CPPBOOCH}.${ELIB} \
    ${NS_SUPPORT}.${ELIB} \
    ${NS_MATH}.${ELIB} \
    ${NS_MESURES}.${ELIB} \
    ${NS_COMPOSANTS}.${ELIB} \
    ${NS_NOYAU}.${ELIB} \
    ${NS_FILTRES}.${ELIB} \
    ${NS_INTERFACE}.${ELIB} \
    ${NS_REPARTITEURS}.${ELIB} \
    ${NS_CONTROLEUR}.${ELIB} \
    ${NS_OBSERVATEURS}.${ELIB} \
    ${NS_DIALOGUE}.${ELIB} \


    #===============================================================




    ################################################################
    ################################################################
    #===============================================================
    # BEGIN : REGLES EXPLICITES
    #===============================================================
    ################################################################
    ################################################################
    #===============================================================
    # BEGIN : Linux
    #===============================================================
    pirrat: intro_test ${LIB_NAMES}
    @echo ================================================================
    @echo "VERSION....... "${VERSION}
    @echo "CIBLE......... "${CIBLE}
    @echo "VORTEXMODE.... "$(VORTEXMODE)
    @echo ----------------------------------------------------------------
    @echo ${@F}.${VORTEXMODE}.${EINT}
    ${LX_LD} -o ${RACINE}/${ND_BIN}/${CIBLE}/$@-${VORTEXMODE}.${EINT} \
    ${LD_FLAGS} $(LD_LIB) ${TOUS_LES_OBJETS} >${RACINE}/${ND_BIN}/${CIBLE}/$@-${VORTEXMODE}.${EMAP}

    @echo done
    @echo ================================================================
    @echo
    @echo

    #===============================================================
    # END : Linux
    #===============================================================

    #===============================================================
    #===============================================================
    intro_test:
    @echo ================================================================
    @echo "VERSION....... "${VERSION}
    @echo "CIBLE......... "${CIBLE}
    @echo "VORTEXMODE.... "$(VORTEXMODE)
    @echo ----------------------------------------------------------------


    ################################################################
    ################################################################
    #===============================================================
    # END : REGLES EXPLICITES
    #===============================================================
    ################################################################
    ################################################################




    #===============================================================
    # BEGIN : REGLE IMPLICITES
    #===============================================================

    #---- CONSTRUCTION DE LIBRAIRIES -------------------------------
    %.${ELIB} :
    @echo ================================================================
    @echo "SOUS-SYSTEME.. "${*F}" ("${CIBLE}")"
    @echo ----------------------------------------------------------------
    @cd ${RACINE}/${ND_CATEGORIES}/${*F} ; \
    ${MAKE} CIBLE=${CIBLE}
    @echo done

    #===============================================================
    # END : REGLE IMPLICITES
    #===============================================================



    #====================== end of makefile ========================


    linux.mk

    #===============================================================================
    # Description du Module Linux.mk
    #
    # Configuration generique pour Makefile Linux
    #
    #===============================================================================

    #===============================================================================
    # SECTION INCLUSION MAKEFILE
    #===============================================================================

    include $(RACINE)/$(ND_MAKEFILES)/Makefile.mk
    include $(RACINE)/$(ND_MAKEFILES)/Tools.mk


    #===============================================================================
    # DEFINITIONS DES EXTENSIONS ET/OU PREFIXES DES TYPES DE FICHIERS
    #----------------------------------------------------------------
    # les definitions generiques dans voir Projarch.mk inclu dans
    # Makefile.mk
    #
    #===============================================================================
    EINT = exe ## exe file
    EMAP = map ## map file

    #===============================================================================
    # REDEFINITIONS SPECIFIQUES CIBLE = Linux
    #===============================================================================
    PLIB = lib ## archive library file prefix

    #===============================================================================
    # ATTENTION : il faut que l'extension des fichiers objets soit
    # differentes pour VxWorks et pour Unix, pour que le
    # <.KEEP_STATE:> fonctionne correctement pour les deux
    #===============================================================================
    EOBJ = o ## target relocatable object file (gcc output)


    #===============================================================================
    # SECTION REDEFINITION SPECIFIQUE DE VARIABLES COMMUNES
    #===============================================================================
    VAR_ENV_CIBLE = CIBLE_Linux

    #===============================================================================
    # OPTIONS d'INCLUSION DES FICHIERS
    #===============================================================================

    OPT_INCLUDE_CCC = $(OPT_INCLUDE_PROJ)\


    #===============================================================================
    # OUTILS UTILISES DANS LE MAKEFILE DE test
    #===============================================================================
    AR = $(LXWORKS_AR)
    RANLIB = $(LXWORKS_RANLIB)
    LD = $(LXWORKS_LD)

    #===============================================================
    # Options de ar :
    # -r : insertion dans l'archive avec remplacement
    #
    # NOTA : option "-s" de $(AR) est equivalent normalement a faire
    # $(RANLIB) mais pose probleme si la librairie n'existe pas encore
    #===============================================================
    ARFLAGS = -srv


    ################################################################
    ################################################################
    # BEGIN : SECTION REGLE EDITION DE LIEN
    ################################################################
    ################################################################
    #===============================================================
    # Options de ld :
    # -d : reservation des symboles communs
    # -M : imprime une map sur la sortie standard
    # -t : imprime le nom des fichiers d'entree
    # -X : efface tous les symboles locaux temporaires
    # -warn-once : affiche qu'une fois le warning
    #===============================================================
    LD_FLAGS = -d -M -X -warn-once
    LD_LIB = -L. -lstdc++ -lm -ldl -lc -lpthread
    ###############################################################
    ################################################################
    # END : SECTION REGLE COMPILATION
    ################################################################
    ################################################################

    ################################################################
    ################################################################
    # BEGIN : SECTION REGLE COMPILATION
    ################################################################
    ################################################################

    #===============================================================================
    #
    # -ansi : mode ansi actif, compatible C89 ISO
    # -c : compilation sans edition de liens
    # -fcheck-new : verifie le pointeur en cree par <operator new>
    # -fno-builtin : toujours actif en C++, supprime les optimisations en ligne
    # -fPIC : generation code position independant
    # -fstack-check : verifie la limite de pile (utile en multi threads)
    # -g : generation d'informations de debug
    # -m32 : format de mémoire à 32 bits
    # -march=i686 : Genere les instructions pour i 686 => pentium-pro
    # -mmmx : utilise les options d'instructions mmx
    # -msse : utilise les options d'instructions floatantes scalaires dans SSE
    # -nostdinc++ : ne recherche pas les entetes standards C++
    # -O3 : selectionne le meilleure ensemble d'optimisations
    # -W : complement de warnings de -Wall
    # -Wall : affiche tous les warnings
    # -Werror : les warnings sont des erreurs
    # -Wfloat-equal : warning comparaison de flottants
    # -Wreorder : warning sur l'ordre des initialisateurs de membres
    #
    #===============================================================================
    LANGAGE = -x c++
    F_CPU = -march=i686 -mmmx -msse -m32

    #-nostdinc++ -fcheck-new
    F_C++ = -fno-builtin -Wreorder -frepo

    F_COMPILE = -ansi -Wall -W -v -fstack-check -Wfloat-equal -pedantic-errors -fPIC
    # -ggdb -Werror

    F_DEF = -D CIBLE_Linux

    #===============================================================================
    # indicateurs de compilation de GCC
    #===============================================================================
    CCC_FLAGS = $(F_COMPILE) $(F_DEF) $(LANGAGE) $(F_CPU) $(F_C++) -pthread \
    -g
    #===============================================================================
    # REGLE DE CONSTRUCTION DES FICHIERS OBJETS
    #===============================================================================

    #===============================================================================
    #---- COMPILATION SOURCE "C++"
    #===============================================================================

    #./$(ND_OBJ)/$(CIBLE)/%.$(EOBJ) : ./$(ND_SOURCES)/%.$(ECC) ./$(ND_INCLUDE)/*.$(ECCCH) $(TEST)/#Makefile $(RACINE)/$(ND_MAKEFILES)/*.mk
    ./$(ND_OBJ)/$(CIBLE)/%.$(EOBJ) : ./$(ND_SOURCES)/%.$(ECC) ./$(ND_INCLUDE)/*.$(ECCCH)
    #-------------------------------------------------------
    # compilation du fichier $@<
    # $@ : la cible
    #-------------------------------------------------------
    $(LXWORKS_CCC) $(CCC_FLAGS) $(OPT_INCLUDE_CCC) -o $@ -c $<



    ################################################################
    ################################################################
    # END : SECTION REGLE COMPILATION
    ################################################################
    ################################################################

    #==================end of makefile Linux.mk======================


    Projarch.mk

    #===============================================================
    #
    # Module: Projarch.mk
    #===============================================================


    #===============================================================
    #===============================================================
    ND_OBJ = object
    #===============================================================

    #===============================================================
    NS_SYSTEM = PIRAT
    #===============================================================
    # NOMS DES SOUS-SYSTEMES
    #===============================================================
    NS_COMMANDES = commandes
    NS_COMPOSANTS = composants.$(VORTEXMODE)
    NS_CONTROLEUR = controleur
    NS_CPPBOOCH = cppbooch
    NS_DIALOGUE = dialogue
    NS_FILTRES = filtres
    NS_GENERATEURS = generateurs
    NS_INTERFACE = interface
    NS_MATH = math.$(VORTEXMODE)
    NS_MESURES = mesures
    NS_NOYAU = noyau.$(VORTEXMODE)
    NS_OBSERVATEURS = observateurs
    NS_REPARTITEURS = repartiteurs
    NS_SUPPORT = support
    NS_VORTEX = vortex.$(VORTEXMODE)



    #===============================================================
    #===============================================================

    #===============================================================
    #===============================================================
    SUBSYSTEM_LIST = $(NS_SUPPORT) \
    $(NS_MATH) \
    $(NS_MESURES) \
    $(NS_COMPOSANTS) \
    $(NS_NOYAU) \
    $(NS_COMMANDES) \
    $(NS_FILTRES) \
    $(NS_INTERFACE) \
    $(NS_VORTEX) \
    $(NS_GENERATEURS) \
    $(NS_REPARTITEURS) \
    $(NS_CONTROLEUR) \
    $(NS_OBSERVATEURS) \
    $(NS_DIALOGUE) \
    $(NS_CPPBOOCH)


    # laisser le SAUT DE LIGNE
    #---------------------------------------------------------------
    #===============================================================


    #===============================================================
    # base pour l'option -I des cc,CC*,
    # independante de la plateforme cible
    #===============================================================
    OPT_INCLUDE_PROJ = \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_SUPPORT)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_MATH)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_MESURES)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_COMPOSANTS)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_NOYAU)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_COMMANDES)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_FILTRES)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_INTERFACE)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_VORTEX)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_GENERATEURS)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_REPARTITEURS)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_CONTROLEUR)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_OBSERVATEURS)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_DIALOGUE)/$(ND_INCLUDE) \
    -I$(RACINE)/$(ND_CATEGORIES)/$(NS_CPPBOOCH)/$(ND_INCLUDE) \


    # laisser le SAUT DE LIGNE
    #---------------------------------------------------------------
    #===============================================================


    #===============================================================
    # MACROS DEFINISSANT LES PREFIXES DE DIVERS TYPES DE FICHIERS #===============================================================
    PLIB = lib ## archive library file prefix
    #===============================================================

    #===============================================================
    # MACROS DEFINISSANT LES EXTENSIONS DE DIVERS TYPES DE FICHIERS #===============================================================
    EO = o ## classic object file
    ECFO = cfo ## (cfront-only output)
    ELIB = a ## library file
    ESUB = s ## sub-system make target
    # BGr
    #ECC = cc ## C++ source file
    ECC = cpp ## C++ source file
    EC = c ## C source file
    ECCCH = hh ## C++ header file
    ECCH = h ## C header file
    EOBJ = obj ## target relocatable object file (cc68k output)
    EINT = int ## partially linked special object file
    #===============================================================

    #================end of makefile projarch.mk=====================


    tools.mk

    #===============================================================
    #
    # Module: Outils.mk
    #
    #===============================================================


    #===============================================================
    # SELECTION DES OUTILS POUR LA PLATEFORME LINUX
    #===============================================================
    LX_CCC = g++

    LX_CC = $(LX_XDEVHOME)gcc
    LX_LD = $(LX_XDEVHOME)ld
    LX_AR = $(LX_XDEVHOME)ar
    LX_RANLIB = $(LX_XDEVHOME)ranlib

    LXWORKS_CCC = $(LX_CCC)
    LXWORKS_LD = $(LX_LD)
    LXWORKS_AR = $(LX_AR)
    LXWORKS_RANLIB = $(LX_RANLIB)
    #===============================================================

    #------------------- LAISSER LE SAUT DE LIGNE ------------------
    #---------------------------------------------------------------
    #===============================================================

    #=================end of makefiletools.mk=======================


    objects1.mk

    #===============================================================
    # Name: "objects.mk"
    #
    # "objects.mk" de sous-systeme SOUS_SYSTEME
    #
    #===============================================================

    #===============================================================
    OBJ_$(LIB_BASENAME)= \
    $(ND_OBJ)/$(CIBLE)/Segment.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Base_Requete.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Parametre.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Parametre_AR.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Liste_Parametres.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Liste_Parametres_AR.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Bloc_Source.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Liste_Sources.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Requete.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Reinitialiser.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Detruire_OG.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Activer_AR.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Creer_Actif_OG.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Interpreteur.$(EOBJ) \
    $(ND_OBJ)/$(CIBLE)/Inst_DIALOGUE.$(EOBJ) \

    #------------LAISSER LES SAUTS DE LIGNE---------------------------
    # $(ND_OBJ)/$(CIBLE)/Filename.$(EOBJ) \
    #===============================================================

    #===================end of makefile objects.mk====================