Make可以找到FORTRAN 77文件,但不能找到FORTRAN 90文件

make finds fortran 77 files but not fortran 90 files

本文关键字:FORTRAN 但不能 90文件 77文件 Make      更新时间:2023-10-16

我使用make编译混合c++/fortran90代码时遇到问题。如果我在子例程中使用fortran77代码,编译就没有问题了。

文件系统的结构:

~/src/working/:
  main.cpp
  Makefile
~/src/lib/:
  f77library.f
  f90library.f90
  cpplibrary.cpp
~/src/headers/:
  cpplibrary.h

生成文件如下所示:

VPATH = ../headers/:../lib/
F77 = gfortran
FC = gfortran
CXX = g++
FCFLAGS = -I/home/user/src/headers/     #These may be redundant with VPATH
FFLAGS = -I/home/user/src/headers/
CXXFLAGS = -I/home/user/src/headers/
main77 = main.o f77library.o cpplibrary.o
main90 = main.o f90library.o cpplibrary.o

main77 : $(main77)
    $(CXX) -o main77 $(main77) -lgfortran
main90 : $(main90)
    $(CXX) -o main90 $(main90) -lgfortran
main77.o : main77.cpp cpplibrary.h
main90.o : main90.cpp cpplibrary.h
cpplibrary : cpplibrary.cpp cpplibrary.h
f77library : f77library.f
f90library : f90library.f90

每个fortran文件都包含完全相同的子程序,每个子程序都是独立的文件。如果我手工编译,它可以正常工作,例如

gfortran -c ../lib/f90library.f90
g++ -c ../lib/cpplibrary.cpp -I../headers/
g++ -c main90.cpp -I../headers/
g++ -o main90 main90.o f90library.o cpplibrary.o

当我使用makefile: make main77编译f77时,它编译得很好。然而,当我尝试make main90时,我得到以下错误消息

g++ -o main90 main90.o f90library.o cpplibrary.o -lgfortran
g++: f90library.o: No such file or directory

简而言之,f90和f77版本之间的一切都是相同的,应该没有编译错误。为什么make不能识别有一个。f90文件需要在lib目录下编译?

显然,Make没有为编译.f90文件提供隐式规则。但是你仍然可以实现你想要的,例如,通过添加一个模式规则

%.o: %.f90
    $(FC) $(FFLAGS) -c $<
相关文章: