ifort 是 Intel Fortran 编译器(Intel Fortran Compiler)的命令行驱动程序,它用于将 Fortran 源代码(文件名通常为 .f, .f90, .f95, .f03, .f08 等)编译成可执行文件、共享库或静态库。

基本语法
ifort 命令的基本格式如下:
ifort [选项] 源文件列表 [库文件列表]
[选项]: 控制编译器的行为,例如优化级别、警告信息、调试信息输出等。源文件列表: 一个或多个 Fortran 源代码文件。[库文件列表]: 链接时需要用到的库文件(如.a静态库或.so共享库)。
常用编译选项
理解并熟练使用这些选项是高效使用 ifort 的关键,我将它们分为几类:
A. 基础选项
| 选项 | 描述 | 示例 |
|---|---|---|
-c |
只编译,不链接,生成目标文件(.o 文件),但不生成最终的可执行文件。 |
ifort -c mymodule.f90 |
-o <输出文件> |
指定输出文件的名称,如果不指定,默认的可执行文件名为 a.out。 |
ifort -o my_program main.f90 |
-S |
生成汇编代码,输出 .s 文件,用于查看编译器生成的底层汇编指令。 |
ifort -S main.f90 |
-E |
只进行预处理,输出预处理后的代码,不进行编译。 | ifort -E main.f90 |
B. 优化选项
| 选项 | 描述 | 示例 |
|---|---|---|
-O0 |
无优化,编译速度最快,但生成的代码执行效率最低,适合调试阶段。 | ifort -O0 -g -o my_program main.f90 |
-O1 |
基本优化,进行一些简单的优化,如代码块移动、无用代码消除等。 | ifort -O1 -o my_program main.f90 |
-O2 |
标准优化,这是最常用的优化级别,在性能和编译时间之间取得了很好的平衡。 | ifort -O2 -o my_program main.f90 |
-O3 |
高级优化,启用更多激进的优化,如循环向量化、自动并行化等。可能导致代码体积变大或与调试器不兼容。 | ifort -O3 -o my_program main.f90 |
-fast |
快速优化,这是一个组合选项,它会根据目标平台自动选择一组优化选项(通常包括 -O3, -xHost, -ipo 等),追求极致性能。慎用,可能影响可移植性。 |
ifort -fast -o my_program main.f90 |
C. 调试选项
| 选项 | 描述 | 示例 |
|---|---|---|
-g |
生成调试信息,编译后的可执行文件中会包含符号表,可以使用 GDB 等调试器进行调试,通常与 -O0 或 -O1 一起使用。 |
ifort -g -O0 -o my_program main.f90 |
D. 标准与方言选项
| 选项 | 描述 | 示例 |
|---|---|---|
-std=f95, -std=f2003, -std=f2008 |
指定 Fortran 标准,强制编译器遵循特定的 Fortran 标准,以避免使用非标准特性。 | ifort -std=f2008 -o my_program main.f90 |
-free |
编译自由格式源代码(.f90, .f95, .f03 等),这是现代 Fortran 的默认格式。 |
ifort -free -o my_program main.f90 |
-fixed |
编译固定格式源代码(.f, .FOR),这是传统 Fortran 的格式,要求代码必须从特定列开始。 |
ifort -fixed -o my_program main.f |
E. 链接选项
| 选项 | 描述 | 示例 |
|---|---|---|
-L<库路径> |
指定库的搜索路径,告诉编译器去哪里寻找链接时需要的库文件。 | ifort -L/usr/local/lib -o my_program main.f90 -lmymath |
-l<库名> |
链接指定的库,注意,库名前没有 lib 前缀,也没有 .a 或 .so 后缀。 |
ifort -o my_program main.f90 -lm (链接标准数学库) |
-static |
静态链接,将所有需要的库都静态链接到可执行文件中,生成的文件较大,但可以在没有安装相应库的机器上运行。 | ifort -static -o my_program main.f90 |
-shared |
创建共享库,生成 .so 文件,而不是可执行文件。 |
ifort -shared -o libmyutils.so mymodule.f90 |
F. 高级与特定架构选项
| 选项 | 描述 | 示例 |
|---|---|---|
-march=native |
针对当前 CPU 架构进行优化,编译器会生成利用当前 CPU 特定指令集的代码,无法在其他不同架构的 CPU 上运行。 | ifort -O2 -march=native -o my_program main.f90 |
-xHost |
类似 -march=native,但更智能,会根据运行编译器的 CPU 来优化生成的代码。 |
ifort -O2 -xHost -o my_program main.f90 |
-ipo |
过程间优化,在链接阶段,允许编译器跨多个源文件进行全局优化,通常能带来性能提升。 | ifort -O2 -ipo -o my_program main.f90 utils.f90 |
-parallel |
自动并行化,尝试自动识别代码中的并行循环,并生成多线程代码(需要配合 -qopenmp)。 |
ifort -O2 -parallel -qopenmp -o my_program main.f90 |
-qopenmp |
启用 OpenMP 支持,如果你的代码中使用了 OpenMP 指令(如 !$OMP PARALLEL DO),必须使用此选项。 |
ifort -qopenmp -o my_program main.f90 |
实践示例
假设我们有以下两个文件:
main.f90:

program hello
use my_module
implicit none
integer :: i
call print_message("Hello from main!")
do i = 1, 5
call print_message("Loop iteration: " // trim(adjustl(i)))
end do
end program hello
my_module.f90:
module my_module
implicit none
contains
subroutine print_message(msg)
character(*), intent(in) :: msg
print *, msg
end subroutine print_message
end module my_module
示例 1:最简单的编译
ifort main.f90 my_module.f90 -o hello
- 这会编译
main.f90和my_module.f90,并将最终生成的可执行文件命名为hello。
示例 2:带调试信息的编译
ifort -g -O0 main.f90 my_module.f90 -o hello_debug
-g生成调试信息,-O0关闭优化,方便使用 GDB 进行调试。
示例 3:带优化的编译
ifort -O2 main.f90 my_module.f90 -o hello_fast
-O2启用标准优化,生成执行效率更高的hello_fast。
示例 4:分步编译(先编译,后链接)
# 1. 只编译,生成 .o 文件 ifort -c main.f90 ifort -c my_module.f90 # 2. 链接 .o 文件生成可执行文件 ifort main.o my_module.o -o hello_step
- 这种方式在大型项目中很有用,因为修改某个源文件后,只需重新编译该文件对应的
.o文件,然后重新链接即可,节省编译时间。
示例 5:链接外部库
假设我们有一个自定义的数学库 libmymath.a,位于 /usr/local/lib。
math_test.f90:
program math_test
implicit none
real :: result
external :: my_custom_sqrt
result = my_custom_sqrt(16.0)
print *, "The result is: ", result
end program math_test
编译命令:

ifort -L/usr/local/lib math_test.f90 -lmymath -o math_test
-L/usr/local/lib告诉编译器去/usr/local/lib目录找库。-lmymath指定链接libmymath.a。
如何确认 ifort 是否已安装并可用?
-
检查命令是否存在:
which ifort
如果返回
/opt/intel/.../bin/ifort这样的路径,说明命令已添加到系统路径中。 -
查看版本信息:
ifort --version # 或者 ifort -V
这会显示 Intel Fortran 编译器的详细版本信息。
-
ifort命令未找到: 这通常意味着 Intel 编译器没有安装,或者没有正确配置环境变量,你需要安装 Intel oneAPI HPC Toolkit 或 Intel Parallel Studio XE,然后根据安装文档设置环境变量(通常是运行source <install_dir>/setvars.sh)。
ifort 是一个功能强大且高度优化的 Fortran 编译器,掌握其常用选项是进行科学计算和工程开发的基础,建议从简单的 -c, -o, -g, -O2 开始,然后根据需要逐步学习和使用更高级的选项,如 -march=native, -ipo, -qopenmp 等,以充分发挥硬件性能。
