0

我尝试编译自由格式的 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.
4

0 回答 0