Compiling a file containing a Fortran 95 MODULE generates a module interface file ( .mod file) for every MODULE encountered in the source. The file name is derived from the name of the MODULE; file xyz.mod (all lowercase) will be created for MODULE xyz.
Compilation also generates a .o module implementation object file for the source file containing the MODULE statements. Link with the module implementation object file along with the all other object files to create an executable.
The compiler creates module interface files and implementation object files in the directory specified by the -moddir=dir flag or the MODDIR environment variable. If not specified, the compiler writes .mod files in the current working directory.
The compiler looks in the current working directory for the interface files when compiling USE modulename statements. The- Mpath option allows you to give the compiler an additional path to search. Module implementation object files must be listed explicitly on the command line for the link step.
Typically, programmers define one MODULE per file and assign the same name to the MODULE and the source file containing it. However, this is not a requirement.
In this example, all the files are compiled at once. The module source files appear first before their use in the main program.
demo% cat mod_one.f90 MODULE one ... END MODULE demo% cat mod_two.f90 MODULE two ... END MODULE demo% cat main.f90 USE one USE two ... END demo% f95 -o main mod_one.f90 mod_two.f90 main.f90
Compilation creates the files:
mainmain.oone.modmod_one.otwo.modmod_two.o
The next example compiles each unit separately and links them together.
demo% f95 -c mod_one.f90 mod_two.f90 demo% f95 -c main.f90 demo% f95 -o main main.o mod_one.o mod_two.o
When compiling main.f90, the compiler searches the current directory for one.mod and two.mod. These must be compiled before compiling any files that reference the modules on USE statements. The link step requires the module implementation object files mod_one.o and mod_two.o appear along with all other object files to create the executable.