在编译包含 Fortran 95 MODULE 的文件时,会为在源代码中遇到的每个 MODULE 生成模块接口文件(.mod 文件)。 文件名是从 MODULE 的名称中派生的;将为 MODULE xyz 创建文件 xyz.mod(全部小写)。
编译还会为包含 MODULE 语句的源文件生成 .o 模块实现对象文件。可与模块实现对象文件以及所有其他对象文件链接在一起以创建可执行文件。
编译器在 -moddir=dir 标志或 MODDIR 环境变量指定的目录中创建模块接口文件和实现对象文件。如果没有指定,则编译器在当前工作目录中写入 .mod 文件。
在编译 USE modulename 语句时,编译器在当前工作目录中查找接口文件。使用 - Mpath 选项,可以为编译器指定其他搜索路径。必须在链接步骤的命令行中显式列出模块实现对象文件。
通常,程序员为每个文件定义一个 MODULE,并为 MODULE 及包含它的源文件指定相同的名称。但是,这并不是必需的。
在本示例中,同时编译所有的文件。模块源文件在主程序使用它们之前就已出现。
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
编译创建以下文件:
mainmain.oone.modmod_one.otwo.modmod_two.o
下一个示例单独编译每个单元,并将它们链接在一起。
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
在编译 main.f90 时,编译器在当前目录中搜索 one.mod 和 two.mod。必须先编译这些文件,再编译在 USE 语句中引用模块的任何文件。链接步骤要求模块实现对象文件 mod_one.o 和 mod_two.o 与所有其他对象文件一起出现,以创建可执行文件。