我尝试编译自由格式的 Fortran 代码(param0.f90、param1.f90 和 param2.f90),其中包含大量用于海啸建模的参数。这个模型包中只有一个固定形式的主程序(tunami.for)。我正在努力使用makefile编译和链接代码。这是我使用的makefile。
#-----------BEGIN MAKEFILE-------------------------------------------------
DEF_FLAGS = -P -traditional
EXEC = TUNAMI
#==========================================================================
#--------------------------------------------------------------------------
# PRECISION DEFAULT PRECISION: SINGLE
# UNCOMMENT TO SELECT DOUBLE PRECISION
#--------------------------------------------------------------------------
# FLAG_1 = -DDOUBLE_PRECISION
# FLAG_2 = -DPARALLEL
# FLAG_3 = -DLANDSLIDE
# FLAG_4 = -DSALINITY
# FLAG_5 = -DTEMPERATURE
# FLAG_6 = -DBUBBLE
# FLAG_7 = -DSEDIMENT
# FLAG_8 = -DVEGETATION
FLAG_9 = -DINTEL
# FLAG_10 = -DBALANCE2D
# FLAG_12 = -DTWOLAYERSLIDE
# FLAG_13 = -DCORALREEF
#--------------------------------------------------------------------------
# mpi defs
#--------------------------------------------------------------------------
CPP = /usr/bin/cpp
CPPFLAGS = $(DEF_FLAGS)
# FC = ifort
FC = ifort
DEBFLGS =
OPT = #-g
CLIB =
#==========================================================================
FFLAGS = $(DEBFLGS) $(OPT)
MDEPFLAGS = --cpp --fext=f90 --file=-
RANLIB = ranlib
#--------------------------------------------------------------------------
# CAT Preprocessing Flags
#--------------------------------------------------------------------------
CPPARGS = $(CPPFLAGS) $(DEF_FLAGS) $(FLAG_1) $(FLAG_2) $(FLAG_3) \
$(FLAG_4) $(FLAG_5) $(FLAG_6) $(FLAG_7) $(FLAG_8) $(FLAG_9) \
$(FLAG_10) $(FLAG_11) $(FLAG_12) $(FLAG_13)
#--------------------------------------------------------------------------
# Libraries
#--------------------------------------------------------------------------
LIBS = -L/home/gugum/Downloads/hypre/src/hypre/lib -lHYPRE
INCS = -L/home/gugum/Downloads/hypre/src/hypre/include
#--------------------------------------------------------------------------
# Preprocessing and Compilation Directives
#--------------------------------------------------------------------------
.SUFFIXES: .o .f90 .F .F90
.c.o:
$(CC) -c $(CFLAGS) $(INCS) $*.c
.F.o:
$(CPP) $(CPPARGS) $(PETSC_FC_INCLUDES) $*.F > $*.f90
$(FC) -c $(FFLAGS) $(INCS) $*.f90
\rm $*.f90
.F90.o:
$(CPP) $(CPPFLAGS) $(CPPDEFS) $(INCLDIR) $< > $*.f
$(FC) -c $(FFLAGS) $(FIXEDFLAGS) $(INCS) $(INCLDIR) $*.f
\rm $*.f90
# \rm $*.f90
#--------------------------------------------------------------------------
# NHWAVE Source Code.
#--------------------------------------------------------------------------
MODS = param0.f90 param1.f90 param2.f90
MAIN = TUNAMI.for
SRCS = $(MODS) $(MAIN)
#OBJS = $(SRCS:.F=.o) param0.o param1.o param2.o
OBJS = $(patsubst %.for,%.o,$(patsubst %.f90,%.o,$(SRCS)))
#--------------------------------------------------------------------------
# Linking Directives
#--------------------------------------------------------------------------
$(EXEC): $(OBJS)
$(FC) $(FFLAGS) $(LDFLAGS) -o $(EXEC) $(OBJS) $(LIBS)
#--------------------------------------------------------------------------
# Cleaning targets.
#--------------------------------------------------------------------------
clean:
/bin/rm -f *.o *.mod
clobber: clean
/bin/rm -f *.f90 *.o tunami
但是,它会产生错误。
make: *** No rule to make target 'param0.o', needed by 'TUNAMI'. Stop.