Salut,
Je voudrais me faire un makefile pour mes programmes écrits en fortran 90. voici ce que j'ai écrit pour l'instant :

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
 
EXEC    = beem_ml.exe
LIB     = libbeem.a
 
FC      = ifort
FFLAGS  = -real-size 128 -u
 
SRC     = $(wildcard *.f90)
SRC_77  = $(wildcard *.f)
SRC_MOD = $(wildcard mod_*.f90)
 
OBJS    = $(SRC:.f90=.o)
OBJS_77 = $(SRC_77:.f=.o)
OBJS_MOD = $(SRC_MOD:.f90=.o)
 
 
all: $(EXEC)
 
 
$(OBJS_MOD): $(SRC_MOD)
          $(FC) $(FFLAGS) -c $^
          touch $*.o
 
$(OBJS_77) : $(SRC_77)
          $(FC) $(FFLAGS) -c $^
 
$(OBJS)    : $(SRC) $(OBJS_MOD)
          $(FC) $(FFLAGS) -c $^
 
$(LIB)     : $(OBJS) $(OBJS_77) $(OBJS_MOD)
          ar -rv $(LIB) $^
 
$(EXEC)    : $(OBJ) $(LIB)
          $(FC) -o $@ $^
 
 
# cleaning repertory. 
# make new remove all *.dat. 
# Needed to run a new calculation, in order to avoid erasing data
 
.PHONY    : clean mrproper new
new         :
           rm -f *.log *.dat
 
clean       :
          rm -f *.o *.mod
 
mrproper : clean new
          rm -f $(EXEC) $(LIB)
En résumé voilà ce que je veux :
- compiler les modules. Ils sont de la forme mod_toto.f90
- compiler les subroutines f77 (écrites par qqun d'autre), qui sont de la forme *.f
- compiler les subroutines f90, qui sont de la forme *.f90 et qui dépendent du module et des subroutines f77
- archiver le tout dans une librairie
- compiler le programme principal qui dépend de la librairie (et donc de tout ce petit monde)

Voilà mon problème : les modules qui sont de la forme mod_*.f90 sont également de la forme *.f90, il y a donc une dépendance circulaire. comment faire pour obtenir un makefile générique?

Merci !