Как создать управляемую сборку в Eclipse Phortran, которая поддерживает зависимости модулей? - PullRequest
2 голосов
/ 08 декабря 2011

Я установил новый Phortran 7 как часть PTP.

Я хочу разработать свой код, используя подход ООП, который требует от меня наличия многих модулей, которые я обнаружил, что система управляемой сборки непонять зависимости в моих файлах .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

Когда я компилирую этот код с помощью управляемой команды make и build в IDE, я получаю следующую ошибку:

Fatal Error: Can't open module file 'module1.mod' for reading at (1): No such file or directory
make: *** [main.o] Error 1

Похоже,этот make-файл идет в алфавитном порядке

, взятый из файла subdir:

F90_SRCS += \
../main.f90 \
../module1.f90

OBJS += \
./main.o \
./module1.o

Я проверил это, и если я скомпилирую проект в порядке modul1.f90 перед main.f90все отлично работает.

Но у меня сложилось впечатление, что среда IDE может автоматически решить эту проблему, ключевое слово USE в Fortran должно указать среде IDE порядок связывания файлов.

Может кто-нибудь помочь мне с этим, я читал в других темах, что управляемый make должен понимать зависимости.

Большое спасибо.

1 Ответ

0 голосов
/ 04 февраля 2014

Я сделал небольшой обходной путь, пытаясь заставить процессор makefile найти зависимости. (Проверено на Eclipse для разработчиков параллельных приложений. Версия: выпуск Juno. Идентификатор сборки: 20120614-1722)

  1. Установить модуль и включить пути (эта цифра цитируется)

Если ваш исходный код содержит строки INCLUDE или USE, ссылающиеся на модули в других файлах, Photran нужно знать, где искать в порядке чтобы найти это. Это не понять это автоматически. Для каждого проект, в котором вы планируете использовать поддержку рефакторинга,

  1. Щелкните правой кнопкой мыши папку вашего проекта в представлении Fortran Projects
  2. Нажмите на Свойства
  3. Разверните Fortran General в списке слева и нажмите Анализ / Рефакторинг
  4. Список папок, в которых находится фотран следует искать ВКЛЮЧИТЬ файлы и модули при рефакторинге. Они будут найдены по порядку от первой папки в списке до последней. Подпапки не будут найдены автоматически; Вы должны включить их явно.
  5. Нажмите ОК

. 2. В eclipse IDE щелкните правой кнопкой мыши в папке вашего проекта, затем -> 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

он будет работать с (Код изменен с здесь )

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

Вы получите ту же ошибку.

Для более крупной программы я использовал ручную опцию makefile . Но для отладки я использовал отладчик Intel idb , потому что в том же make-файле отладчик Photran не устанавливал точки останова.

Удачи приятель.

...