跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:Fortran 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
在 shell 提示符下调用编译器有一个简单的命令命令,其语法是:
f95 [options] files...
其中,files… 是一个或多个以 .f、.F、.f90、.f95、.F90、.F95 或 .for 结尾的 Fortran 源文件名称;options 是一个或多个编译器选项标志。(以 .f90 或 .f95 扩展名结尾的文件是只能由 f95 编译器识别的“自由格式”Fortran 95 源文件。)
在下面的示例中,我们在启用运行时调试的情况下,使用 f95 来编译两个源文件以生成名为 growth 的可执行文件:
demo% f95 -g -o growth growth.f fft.f95
注 - 可以使用 f95 或 f90 命令来调用 Fortran 编译器。
新增功能:该编译器还接受扩展名为 .f03 或 .F03 的源文件。这些文件将被视为与 .f95 和 .F95 等效,并且可以作为一种方式来表示源文件包含 Fortran 2003 扩展名。
2.2.2 命令行文件命名约定说明了编译器可以识别的各种源文件扩展名。
在上一示例中,编译器自动生成加载器目标文件 growth.o 和 fft.o,然后调用系统链接程序以创建可执行程序文件 growth。
在编译后,目标文件 growth.o 和 fft.o 将保留。此约定使您可以方便地重新链接和重新编译文件。
如果编译失败,您将收到每个错误的对应消息。对于出现错误的源文件,不会生成任何 .o 文件,也不会写入任何可执行程序文件。
在命令行上出现的文件名后附加的后缀扩展名决定了编译器处理文件的方式。如果文件名的后缀扩展名不是下面列出的任意一个扩展名,或者没有扩展名,则这些文件名将传递给链接程序。
表 2-1 由 Fortran 编译器识别的文件名后缀
|
Fortran 95 自由格式在4.1 源语言功能中进行说明。
Fortran 编译器可从命令行接受多个源文件。单个源文件(也称为编译单元)可以包含任意数量的过程(主程序、子例程、函数、块数据、模块等)。可以将应用程序配置为每个文件一个源代码过程,或者将协同工作的过程集中到单个文件中。《Fortran 编程指南》介绍了这些配置的优缺点。
f95 支持两种源文件预处理程序:fpp 和 cpp。编译器可以在编译之前调用任一源文件预处理程序来扩展源代码“宏”和符号定义。缺省情况下,编译器将使用 fpp;-xpp=cpp 选项可将缺省设置由 fpp 更改为 cpp。(另请参见有关 -Dname 选项的论述。)
fpp 是 Fortran 特定的源文件预处理程序。有关详细信息,请参见 fpp(1) 手册页。缺省情况下,系统会对具有 .F、.F90、.F95 或 .F03 扩展名的文件调用该预处理程序。
fpp 的源代码可从 Netlib Web 站点获得:
http://www.netlib.org/fortran/
有关标准 Unix C 语言预处理程序的信息,请参见 cpp(1)。对于 Fortran 源文件,建议使用 fpp 而不是 cpp。
您可以在不同的步骤中编译和链接。-c 选项编译源文件并生成 .o 目标文件,但不会创建可执行文件。如果不使用 -c 选项,则编译器将调用链接程序。如果通过这种方式将编译和链接步骤分开,那么就不必只为了修复一个文件而重新执行完整的编译,如以下示例所示:
使用单独的步骤来编译一个文件,并将其与其他文件链接在一起:
demo% f95 -c file1.f (Make new object file) demo% f95 -o prgrm file1.o file2.o file3.o (Make executable file)
请确保链接步骤列出了生成完整程序所需的全部目标文件。如果在此步骤中缺少任何目标文件,则链接将失败,并显示未定义的外部引用错误(缺少例程)。
每当分步完成编译和链接时,确保编译和链接选项的一致选择至关重要。在使用选项编译程序的任何部分时,必须使用相同的选项进行链接。另外,许多选项要求使用该选项编译所有源文件,包括链接步骤。
第 3 章中的选项描述指明了此类选项。
示例: 用 -fast 编译 sbr.f,编译 C 例程,然后分步进行链接:
demo% f95 -c -fast sbr.f demo% cc -c -fast simm.c demo% f95 -fast sbr.o simm.o link step; passes -fast to the linker
编译器无法识别的任何命令行参数都将解释为可能是链接程序选项、目标程序文件名或库名称。
基本区别是:
无法识别的选项(带有 -)会生成警告。
无法识别的非选项(不带 -)不生成警告。但是,这些非选项将被传递给链接程序,如果链接程序无法识别它们,它们将生成链接程序错误消息。
例如:
demo% f95 -bit move.f <- -bit is not a recognized f95 option f95: Warning: Option -bit passed to ld, if ld is invoked, ignored otherwise demo% f95 fast move.f <- The user meant to type -fast ld: fatal: file fast: cannot open file; errno=2 ld: fatal: File processing errors. No output written to a.out
请注意,在第一个示例中,f95 无法识别 -bit,该选项将被传递给链接程序 (ld),后者试图对其进行解释。因为单字母 ld 选项可以串联起来,所以链接程序会将 -bit 视为 -b -i -t,而这些都是合法的 ld 选项!这可能是(也可能不是)用户所希望的结果。
在第二个示例中,用户想键入 f95 选项 -fast,但忽略了前导短线。编译器再次将参数传递给链接程序,而链接程序将参数解释为一个文件名。
这些示例表明在编写编译器命令行时应格外小心!
f95 自动为在源文件中遇到的每个 MODULE 声明创建模块信息文件,并搜索 USE 语句所引用的模块。对于遇到的每个模块 (MODULE module_name),编译器都在当前目录中生成相应的文件 module_name.mod。例如,f95 为文件 mysrc.f95 中出现的 MODULE list 单元生成模块信息文件 list.mod。
有关如何设置写入和搜索模块信息文件时所用的缺省路径的信息,请参见 -Mpath 和 -moddir dirlist 选项标志。
有关隐式调用所有编译单元中的 MODULE 声明的信息,另请参见 -use 编译器选项。
使用 fdumpmod(1) 命令可显示与 .mod 模块信息文件内容有关的信息。
有关详细信息,请参见 4.9 模块文件。