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

Fortran Discussion :

Makefile : sources dans plusieurs dossiers


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Par défaut Makefile : sources dans plusieurs dossiers
    Salut,

    j'ai un petit souci pour faire un Makefile. Je cherche à le faire le plus générique possible pour pouvoir le réutiliser avec le plus grand nombre de projets en le modifiant le moins possible.

    Ayant de nombreux projets différents, avec un grand nombre de fichiers source (dans un certain nombre de sous-dossiers pour chaque projet), j'aimerais pouvoir me contenter d'indiquer les noms de ces sous-dossiers où chercher les sources, et qu'il utilise alors automatiquement tous les .f s'y trouvant (en plus de ceux du dossier racine).

    Pour fixer les idées sur l'arborescence d'un projet :

    Dossier Projet
    p1.f
    p2.f
    ...
    Sous-dossier A
    a1.f
    a2.f
    ...
    Sous-dossier B
    b1.f
    b2.f
    ...
    Sous dossier C, D... etc


    Voici alors le Makefile que j'utilise actuellement :

    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
    # Dossiers
    Objets_dir = temp/Win
    VPATH = aero:maths:$(Objets_dir)
     
    # Fichiers du projet
    Executable = a.exe
    #Src = $(wildcard *.f)
    #Objets = $(Src:.f=.o)
    Objets = $(patsubst %.f,%.o,$(wildcard *.f))
     
    # Commandes et options
    F_compilo = gfortran
    #F_compilo_options = -fno-automatic -O2 -fdefault-real-8 -Wline-truncation -Wsurprising -ffpe-trap=invalid,zero,overflow -march=core2 -mfpmath=sse
    F_compilo_options = -fno-automatic -O2 -Wline-truncation -Wsurprising -ffpe-trap=invalid,zero,overflow -march=core2 -mfpmath=sse
    Link = gfortran
    Link_options =
     
    # Compilation (génération des .o)
    %.o:%.f
    	$(F_compilo) $(F_compilo_options) -c $< -o $(Objets_dir)/$@
     
    # Link (génération de l'éxecutable)
    $(Executable): $(Objets)
    	$(Link) $(Link_options) -o $@ $(addprefix $(Objets_dir)/, $(Objets))
    Cela marche bien... sauf qu'il ne me trouve que les .f présents dans le dossier racine du projet mais pas dans les sous-dossiers.

    Quelqu'un saurait-il comment faire ? je ne sais pas comment lui dire d'effectuer le wildcard sur tous les dossiers donnés.

    Merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Par défaut
    personnellement, je fais un Makefile pour chaque sous-dossier, et un Makefile pour le dossier projet qui se charge de faire l'édition de liens.

    pour chaque sous-dossier (où seuls FICLIB et DIRINCS sont à adapter pour chaque sous-dossier) :
    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
    #***********************************************************************
    # Description
    #>    Compilation du plan maths
    # Creation
    #>    07/05/2010
    # Revision
    #>
    #
    #***********************************************************************
     
    # Nom de la librairie
    FICLIB = $(DIRLIB_LIB)/libmaths.a
     
    # Includes necessaires au plan
    DIRINCS = -I$(DIRINC)  \
    	      -I$(DIRLIB)/messages/inc
     
    # Nom des fichiers sources Fortran
    FICSRCF = $(wildcard $(DIRSRC)/*.F)
     
    # Nom des fichiers sources C
    FICSRCC = $(wildcard $(DIRSRC)/*.c)
     
    # Nom des fichiers objets correspondant aux fichiers sources
    FICOBJF = $(FICSRCF:$(DIRSRC)/%.F=$(DIROBJ)/%.o)
    FICOBJC = $(FICSRCC:$(DIRSRC)/%.c=$(DIROBJ)/%.o)
     
    # Creation de la librairie
    $(FICLIB): $(FICOBJF) $(FICOBJC)
    	@echo Creation de la librairie $@
    	@ar -cr $@ $(FICOBJF) $(FICOBJC)
    	@echo
     
    # Compilation des fichiers sources Fortran
    $(FICOBJF): $(FICSRCF)
    	@echo Compilation de $@
    	@$(FC) $(OPTIONSF) $(DIRINCS) -c $(DIRSRC)/$(@F:.o=.F) -o $@
     
    # Compilation des fichiers sources C
    $(FICOBJC): $(FICSRCC)
    	@echo Compilation de $@
    	@$(CC) $(OPTIONSC) $(DIRINCS) -c $(DIRSRC)/$(@F:.o=.c) -o $@
    pour le dossier projet (où seuls FICEXE, DIRINCS et LIBS sont a adapter) :
    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
    #***********************************************************************
    # Description
    #>    Compilation du programme ephem
    # Creation
    #>    08/05/2010
    # Revision
    #>
    #
    #***********************************************************************
     
    # Nom de l'executable
    FICEXE = $(DIREXE)/ephem.exe
     
    # Includes necessaires au plan
    DIRINCS = -I$(DIRINC)  \
    	      -I$(DIRLIB)/maths/inc        \
    	      -I$(DIRLIB)/dates/inc        \
    	      -I$(DIRLIB)/affichage/inc    \
    	      -I$(DIRLIB)/messages/inc     \
    	      -I$(DIRLIB)/iers/inc         \
    	      -I$(DIRLIB)/nutation/inc     \
    	      -I$(DIRLIB)/observateur/inc  \
    	      -I$(DIRLIB)/config/inc       \
    	      -I$(DIRLIB)/de406/inc
     
    # Librairies necessaires a l'executable
    LIBS = $(DIRLIB_LIB)/libde406.a          \
    	   $(DIRLIB_LIB)/libconfig.a         \
    	   $(DIRLIB_LIB)/libobservateur.a    \
    	   $(DIRLIB_LIB)/libaberration.a     \
    	   $(DIRLIB_LIB)/libaffichage.a      \
    	   $(DIRLIB_LIB)/libfichiers.a       \
    	   $(DIRLIB_LIB)/libmessages.a       \
    	   $(DIRLIB_LIB)/libiers.a           \
    	   $(DIRLIB_LIB)/libnutation.a       \
    	   $(DIRLIB_LIB)/libconstellation.a  \
    	   $(DIRLIB_LIB)/libmagnitude.a      \
    	   $(DIRLIB_LIB)/libdates.a          \
    	   $(DIRLIB_LIB)/libmaths.a
     
    # Nom des fichiers sources Fortran
    FICSRCF = $(wildcard $(DIRSRC)/*.F)
     
    # Nom des fichiers sources C
    FICSRCC = $(wildcard $(DIRSRC)/*.c)
     
    # Nom des fichiers objets correspondant aux fichiers sources Fortran
    FICOBJF = $(FICSRCF:$(DIRSRC)/%.F=$(DIROBJ)/%.o)
     
    # Nom des fichiers objets correspondant aux fichiers sources C
    FICOBJC = $(FICSRCC:$(DIRSRC)/%.c=$(DIROBJ)/%.o)
     
    #Edition de liens
    $(FICEXE): $(FICOBJF) $(FICOBJC)
    	@echo Edition de liens $@
    	@$(FC) $(OPTIONSF) $(FICOBJF) $(FICOBJC) $(LIBS) -o $@
     
    # Compilation des fichiers sources Fortran
    $(FICOBJF): $(FICSRCF)
    	@echo Compilation de $@
    	@$(FC) $(OPTIONSF) $(DIRINCS) -c $(DIRSRC)/$(@F:.o=.F) -o $@
     
    # Compilation des fichiers sources C
    $(FICOBJC): $(FICSRCC)
    	@echo Compilation de $@
    	@$(CC) $(OPTIONSC) $(DIRINCS) -c $(DIRSRC)/$(@F:.o=.c) -o $@

Discussions similaires

  1. Enregistrer les logs dans plusieurs dossiers
    Par Guillaume.G dans le forum Apache
    Réponses: 1
    Dernier message: 15/07/2008, 11h28
  2. Lier des fichiers sources dans plusieurs assemblies
    Par despeludo dans le forum Framework .NET
    Réponses: 2
    Dernier message: 15/12/2007, 22h41
  3. [Tableaux] Image aléatoire dans plusieurs dossiers
    Par Gunner4902 dans le forum Langage
    Réponses: 13
    Dernier message: 11/12/2007, 17h39
  4. Makefile : fichiers sources dans differents dossiers ?
    Par DrySs dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 22/03/2006, 10h52

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