我已经安装了新的Phortran 7作为PTP的一部分。
我想使用OOP方法开发我的代码,这需要我有许多模块 我发现托管构建系统不理解我的.f90文件中的依赖项。
我现在正在解决这个问题一天。我将使用“假”项目解释我的问题
我的项目有2个文件
main.f90,module1.f90
main.f90:
program main
use module1
implicit none
.....
code...
.....
end program main
module1.f90:
module module1
implicit none
contains
.....
code...
.....
end module module1
当我在IDE中使用托管make和build命令编译此代码时,我收到以下错误:
Fatal Error: Can't open module file 'module1.mod' for reading at (1): No such file or directory
make: *** [main.o] Error 1
似乎makefile按字母顺序排列
取自子文件:
F90_SRCS += \
../main.f90 \
../module1.f90
OBJS += \
./main.o \
./module1.o
我确实检查了这个,如果我在main.f90之前以modul1.f90的顺序编译项目,一切都很好。
但我的印象是IDE可以自动解决这个问题,Fortran中的USE关键字需要告诉IDE链接文件的顺序。
有人可以帮我解决这个问题,我已经在其他主题中读过托管make应该理解依赖关系。
非常感谢。
答案 0 :(得分:0)
我尝试告诉makefile处理器找到依赖关系。 (在Eclipse上为并行应用程序开发人员测试过。版本:Juno Release。版本号:20120614-1722)
如果您的源代码包含引用的INCLUDE行或USE行 在其他文件中的模块,Photran需要知道按顺序查看的位置 找到这些。它不会自动解决这个问题。对于每一个 计划使用重构支持的项目,
- 右键单击Fortran项目视图中的项目文件夹
- 点击“属性”
- 在左侧列表中展开Fortran General,然后单击Analysis / Refactoring
- 列出Photran所在的文件夹 应该在重构时搜索INCLUDE文件和模块。将从列出的最后一个文件夹中按顺序搜索它们。不会自动搜索子文件夹;你必须明确地包括它们。
- 点击确定
醇>
。 2.在eclipse IDE中右键单击项目文件夹,然后 - > gt; refactor-> subprogram->引入调用树。它应该向您显示模块中的所有依赖项。
您应该小心模块的顺序:
使用模块
module constants
implicit none
real, parameter :: PI=3.14
real, parameter :: E=2.71828183
integer, parameter :: answer=42
real, parameter :: earthRadiusInMeters=6.38e6
end module constants
module constants2
implicit none
real, parameter :: PI2=3.14
real, parameter :: E2=2.71828183
integer, parameter :: answer2=42
real, parameter :: earthRadiusInMeters2=6.38e6
end module constants2
它将运行(代码从here修改)
program test
! Option #1: blanket "use constants"
! use constants
! Option #2: Specify EACH variable you wish to use.
use constants, only : PI,E,answer,earthRadiusInMeters
use constants2, only : PI2,E2,answer2,earthRadiusInMeters2
implicit none
write(6,*) "Hello world. Here are some constants:"
write(6,*) PI, E, answer, earthRadiusInMeters
write(6,*) PI2, E2, answer2, earthRadiusInMeters2
end program test
但是如果你改变了
use constants, only : PI,E,answer,earthRadiusInMeters
use constants2, only : PI2,E2,answer2,earthRadiusInMeters2
implicit none
这个
use constants2, only : PI2,E2,answer2,earthRadiusInMeters2
use constants, only : PI,E,answer,earthRadiusInMeters
implicit none
你会得到同样的错误。
对于更大的计划,我使用了manual makefile option。但是对于调试我已经使用了英特尔调试器 idb ,因为使用相同的makefile,Photran的调试器没有设置断点。
祝你好运。