problème Makefile pour projet fortran
Salut,
Je voudrais me faire un makefile pour mes programmes écrits en fortran 90. voici ce que j'ai écrit pour l'instant :
Code:
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 !