具有.F03扩展的Fortran文件的Makefile不起作用

时间:2015-08-18 13:58:46

标签: makefile fortran

我有一个简单的Makefile来编译和链接一个小的FORTRAN代码。我是使用Makefile的新手。 make文件如下。它在UNIX系统(OS X)上运行得非常好,但是当我在Linux系统中尝试它时会出现以下错误消息:

gfortran -std=f2003 -g -c m_getoptions.F03
gfortran: m_getoptions.F03: linker input file unused because linking not done
gfortran -std=f2003 -g -c m_readwf.F03
gfortran: m_readwf.F03: linker input file unused because linking not done
gfortran -std=f2003 -g -c ptdwf.F03
gfortran: ptdwf.F03: linker input file unused because linking not done
gfortran -std=f2003 -g -o TDWF ptdwf.o m_getoptions.o m_readwf.o
gfortran: ptdwf.o: No such file or directory
gfortran: m_getoptions.o: No such file or directory
gfortran: m_readwf.o: No such file or directory
make: *** [TDWF] Error 1

我在两个系统上都有GNU make 3.81。任何想法。

# Makefile for PTDWF.
#
.SUFFIXES:
.SUFFIXES: .o .mod .F03
#
#
#
#
#Compiler options
#FC = $(FC)
#FC =  ifort
FC = gfortran -std=f2003
FFLAGS=-g
#
OBJS=ptdwf.o m_getoptions.o m_readwf.o
TDWF: $(OBJS)
#
#
        $(FC) $(FFLAGS) -o TDWF $(OBJS)
%.o:%.F03
        $(FC) $(FFLAGS) -c $<
#
clean:
        rm -f *.o *.mod TDWF
# DO NOT DELETE THIS LINE - used by make depend
ptdwf.o: m_getoptions.o m_readwf.o

1 个答案:

答案 0 :(得分:3)

扩展程序F03不是gfortran识别的有效Fortran扩展程序。 Gfortran将扩展名.f用于固定格式代码,将.f90用于自由格式代码。大写字母F(.F.F90)的变体表示在编译之前应对源进行预处理。扩展名不表示用于编译源代码的标准。

要修复错误,请重命名文件,或使用在源文件名中提供更多余地的其他编译器(例如ifort)。一般来说,按标准命名文件不是一个好习惯,没有其他语言可以做到这一点(例如,你没有看到.c89.c99.cpp11.cc14,等等)。

另一个解决方案(感谢francescalus)是将选项-x <language>添加到您的gfortran命令行,其中<language>的有效选项为f77f77-cpp-inputf95f95-cpp-input。对于需要预处理的现代Fortran源,选项-x f95-cpp-input将是正确的选择。