我有一个简单的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
答案 0 :(得分:3)
扩展程序F03
不是gfortran识别的有效Fortran扩展程序。 Gfortran将扩展名.f
用于固定格式代码,将.f90
用于自由格式代码。大写字母F(.F
,.F90
)的变体表示在编译之前应对源进行预处理。扩展名不表示用于编译源代码的标准。
要修复错误,请重命名文件,或使用在源文件名中提供更多余地的其他编译器(例如ifort)。一般来说,按标准命名文件不是一个好习惯,没有其他语言可以做到这一点(例如,你没有看到.c89
,.c99
,.cpp11
,.cc14
,等等)。
另一个解决方案(感谢francescalus)是将选项-x <language>
添加到您的gfortran命令行,其中<language>
的有效选项为f77
,f77-cpp-input
, f95
或f95-cpp-input
。对于需要预处理的现代Fortran源,选项-x f95-cpp-input
将是正确的选择。