如何在Eclipse Phortran中创建支持模块依赖关系的托管构建?

时间:2011-12-07 23:23:01

标签: eclipse build mingw fortran fortran90

我已经安装了新的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应该理解依赖关系。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我尝试告诉makefile处理器找到依赖关系。 (在Eclipse上为并行应用程序开发人员测试过。版本:Juno Release。版本号:20120614-1722)

  1. Set Module and Include Paths(引用此数字)
  2.   

    如果您的源代码包含引用的INCLUDE行或USE行   在其他文件中的模块,Photran需要知道按顺序查看的位置   找到这些。它不会自动解决这个问题。对于每一个   计划使用重构支持的项目,

         
        
    1. 右键单击Fortran项目视图中的项目文件夹
    2.   
    3. 点击“属性”
    4.   
    5. 在左侧列表中展开Fortran General,然后单击Analysis / Refactoring
    6.   
    7. 列出Photran所在的文件夹   应该在重构时搜索INCLUDE文件和模块。将从列出的最后一个文件夹中按顺序搜索它们。不会自动搜索子文件夹;你必须明确地包括它们。
    8.   
    9. 点击确定
    10.   

    。 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的调试器没有设置断点。

    祝你好运。