Укажите каталог, где gfortran должен искать модули - PullRequest
16 голосов
/ 13 января 2012

В настоящее время я компилирую программы на основе модулей (например, основная программа foo, которая зависит от модуля bar) следующим образом:

gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o

Это прекрасно работает, когда foo.f90 и bar.f90 находятся в одном каталоге. Как мне указать каталог, где gfortran должен искать bar.o, когда я звоню use bar в foo.f90? (т.е. я не хочу указывать, что компилятор должен ссылаться конкретно на bar.o, я просто хочу, чтобы он нашел его.)

Ответы [ 2 ]

21 голосов
/ 16 января 2012

Вы можете указать gfortran, где находятся файлы вашего модуля (файлы .mod), с флагом -I compiler. Кроме того, вы можете указать компилятору, куда поместить скомпилированные модули с флагом компилятора -J. См. Раздел «Параметры поиска в каталоге» на справочной странице gfortran .

Я использую их, чтобы поместить и мой объект (файлы .o), и файлы моего модуля в один каталог, но в другой каталог со всеми моими исходными файлами, поэтому я не загромождаю свой исходный каталог. Например,

SRC = /path/to/project/src
OBJ = /path/to/project/obj
BIN = /path/to/project/bin

gfortran -J$(OBJ) -c $(SRC)/bar.f90 -o $(OBJ)/bar.o
gfortran -I$(OBJ) -c $(SRC)/foo.f90 -o $(OBJ)/foo.o
gfortran -o $(BIN)/foo.exe $(OBJ)/foo.o $(OBJ)/bar.o

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

Только для справки, эквивалентные флаги компилятора Intel Fortran: -I и -module. По сути, ifort заменяет параметр -J на -module. Обратите внимание, что после модуля есть пробел, но не после J.

8 голосов
/ 14 января 2012

При компиляции исходного кода Fortran, который содержит модули, файл .mod (обычно имя файла совпадает с именем модуля) создается вместе с объектным файлом.Файл .mod должен находиться в том же каталоге, что и исходный файл, использующий этот модуль, или указывать на него во время компиляции, используя флаг -I:

gfortran -c bar.f90 
gfortran -c foo.f90 -I$PATH_TO_MOD_FILE
gfortran -o foo.exe foo.o bar.o

Обратите внимание, что .mod должен существоватьво время компиляции foo.f90.

...