Sun Studio 12 Update 1:Fortran 用户指南

4.9 模块文件

在编译包含 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.modtwo.mod。必须先编译这些文件,再编译在 USE 语句中引用模块的任何文件。链接步骤要求模块实现目标文件 mod_one.omod_two.o 与所有其他目标文件一起出现,以创建可执行文件。

4.9.1 搜索模块

在发行的 7.0 版的 Fortran 编译器中,可以将 .mod 文件存储在归档 (.a) 文件中。要在归档中搜索模块,必须在命令行的 -Mpath 标志中显式指定它。在缺省情况下,编译器并不搜索归档文件。

仅搜索与 USE 语句中出现的名称同名的 .mod 文件。例如,Fortran 语句 USE mymod 使编译器缺省搜索模块文件 mymod.mod

在搜索过程中,编译器为在其中写入模块文件的目录指定更高的优先级。可以使用 -moddir=dir 选项标志和 MODDIR 环境变量对此进行控制。这意味着,如果仅指定了 -Mpath 选项,则首先搜索当前目录,然后再搜索 -M 标志上列出的目录和文件。

4.9.2 -use=list 选项标志

-use=list 标志强制将一个或多个隐式 USE 语句添加到每个使用该标志编译的子程序或模块子程序中。通过使用该标志,使得在库或应用程序的某个功能要求使用模块或模块文件时,不必修改源程序。

使用 -use=module_name 进行编译,可将 USE module_name 语句添加到正在编译的每个子程序或模块中。使用 -use=module_file_name 进行编译,与为 module_file_name 文件中包含的每个模块添加 USE module_name 具有相同的效果。

4.9.3 fdumpmod 命令

使用 fdumpmod(1) 命令可显示有关已编译模块信息文件的内容的信息。


demo% fdumpmod x.mod group.mod
x 1.0 v8,i4,r4,d8,n16,a4 x.mod
group 1.0 v8,i4,r4,d8,n16,a4 group.mod

fdumpmod 命令将在单个 .mod 文件、通过串联 .mod 文件形成的文件以及 .mod 文件的 .a 归档中显示有关模块的信息。显示的内容包含模块名称、版本号、目标体系结构,以及用来指示与模块兼容的编译选项的标志。有关详细信息,请参见 fdumpmod(1) 手册页。