Dołącz pliki i moduły#
Twój program może być zapisany w wielu plikach źródłowych, które wszystkie są przechowywane w jednym folderze lub są zorganizowane w praktyczny sposób w twoim drzewie katalogów. Szczegóły organizacji zależą od indywidualnych preferencji, ustaleń grupy deweloperów do których należysz, lub po prostu historii programu. Niezależnie od twojej struktury zapewne napotkasz sytuację, w której twój kompilator będzie potrzebował pomocy, aby skompilować dany plik źródłowy:
Fortran (oraz inne języki) ma możliwość dołączania plików zewnętrznych. Pomimo tego, że fukcja ta nie jest już tak często używana ze względu na nastanie modułów, wciąż ma jednak swoje zastosowania. Dosyć często, takie „pliki zawarte” są przechowywane w folderze oddzielonym od folderów zawierających pliki źródłowe, ponieważ są używane w wielu miejscach. Często folder ten ma nazwę „include”.
Jak już widzieliśmy, kompilowanie kodu źródłowego, który definiuje jeden lub więcej modułów prowadzi do generowania przez kompilator tak zwanych „plików pośrednich modułów” (zawierających rozszerzenie „.mod”). Kompilator potrzebuje mieć dostęp do tych plików, aby być w stanie odczytać interfejsy, zmienne, itd. i na podstawie tych informacji kompiluje właściwy kod źródłowy, który używa różnych modułów.
Kompilatory zapewniają opcje takie jak -I
, aby wskazać, gdzie takie pliki zawarte oraz pliki pośrednie modułów mogą być znalezione. Przyjmijmy, że przechowywamy dwa pliki naszego programu tabulate
w następującej strukturze folderów:
tabulate/
main/
tabulate.f90
sub/
functions.f90
Skompilowane pliku „functions.f90” za pomocą komendy
$ cd sub
$ gfortran -c functions.f90
prowadzi do takiej struktury:
tabulate/
main/
tabulate.f90
sub/
functions.f90
user_functions.mod
functions.o
Aby poprawnie skompilować, a następnie utworzyć program musimy powiedzieć kompilatorowi, gfzie może znaleźć plik „user_functions.mod”:
$ cd main
$ gfortran -c tabulate.f90 -I ../sub
$ gfortran -o tabulate tabulate.o ../sub/functions.o
Rezultat:
tabulate/
main/
tabulate.f90
tabulate.o
tabulate (or tabulate.exe on Windows)
sub/
functions.f90
functions.o
user_functions.mod
Uwagi:
Szczegóły różnią się w zależności od kompilatora. Czasami po opcji
-I
powinna być dodana spacja oraz nazwa folderu, a czasami foldery powinny występować jeden po drugim.Domyślnie pliki pośrednie modułów (.mod) są zapisane w tym samym folderze co pliki obiektowe. Kiedy kod twojego programu jest zapisany w różnych podfolderach, zostaną one rozrzucone po drzewie katalogów tym samym komplikując proces kompilacji. Na szczęście, wiele kompilatowów pozwala na sprecyzowanie lokalizacji wyjściowej tych plików. Dla gfortran jest to
-J
, na przykład:-J../include
(aby wszystkie pliki .mod pojawiły się w tym samym folderze)Dla większych programów, które składają się z wielu plików źródłowych, ważnym jest, aby dokładnie przemyśleć jaką strukturę organizacji wybrać.