Make可以找到FORTRAN 77文件,但不能找到FORTRAN 90文件
make finds fortran 77 files but not fortran 90 files
我使用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 $<
相关文章:
- 是否可以将函数导入命名空间,但不能导出它?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- 为什么我可以从C++文件中读取 int 值,但不能浮点?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- SqLite c++,可以创建数据库,但不能将 anthing 插入到表中
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- C++:返回本地对象,但不能正常工作
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- QProcess可以启动程序,但不能启动python(命令行)
- C++11 向量包含 2 个不同的子类,但不能同时进行
- Eclipse 中的 Makefile 项目可以运行,但不能调试,为什么?
- Make可以找到FORTRAN 77文件,但不能找到FORTRAN 90文件