gFortran编译器使用指南
941 字
5 分钟
gFortran编译器使用指南
终端 gFortran
使用conda-forge中发布的gfortran编译器
下面为一套 gfortran 常用命令速查表,按“最常用 → 进阶 → 调试/排错”来分。
0. 环境配置
使用conda环境配置gfortran编译器。建议先创建虚拟环境配置fortran编译器,虚拟环境创建方法见[[终端Conda]]
以下是配置方法: 进入虚拟环境后,从conda-forge中下载gFortran编译器,conda-forge中更新更快,版本更全
conda install -c conda-forge gfortran此时已经完成gfortran编译器的安装,需要一个编辑器,这里选择VS code。在VS code中安装modern Fortran插件,按照文档配置fortls、fprettify 提供代码补全和语法检查。
详细配置方法见 Bilibili BV1WfNCz8EzE
1. 最基本的编译命令
1.1 编译并链接生成可执行文件
gfortran main.f90 -o main如果有多个源文件:
gfortran a.f90 b.f90 c.f90 -o app1.2 只编译,不链接
生成 .o 文件:
gfortran -c main.f90多个文件:
gfortran -c a.f90 b.f901.3 指定输出文件名
gfortran main.f90 -o myprog2. 处理不同格式/预处理
2.1 强制自由格式
gfortran -ffree-form file.f -o file2.2 强制固定格式
gfortran -ffixed-form legacy.f90 -o legacy2.3 开启预处理
会链接成exe文件
gfortran -cpp main.F90 -o main只预处理为f90文件
gfortran -cpp -E main.F90 -o main.f902.4 关闭预处理
gfortran -nocpp main.F90 -o main一般来说:
.f/.for/.ftn:常按固定格式.f90:自由格式.F90:通常预处理 + 自由格式
3. 常用警告和检查选项
3.1 打开常见警告
gfortran -Wall main.f90 -o main3.2 更严格一些
gfortran -Wall -Wextra main.f90 -o main3.3 检查运行时错误
gfortran -fcheck=all main.f90 -o main常用于调试:
- 数组越界
- 未初始化访问
- 一些运行时错误
4. 调试相关
4.1 加调试信息
gfortran -g main.f90 -o main4.2 适合调试的组合
gfortran -g -O0 -Wall -Wextra -fcheck=all main.f90 -o main说明:
-g:生成调试符号-O0:关闭优化,便于调试-fcheck=all:运行时检查-Wall -Wextra:尽量多提示问题
5. 常用优化选项
5.1 常规优化
gfortran -O2 main.f90 -o main5.2 更高优化
gfortran -O3 main.f90 -o main5.3 发布版常见组合
gfortran -O2 -march=native main.f90 -o main说明:
-O2:常用平衡优化-O3:更激进优化-march=native:针对当前机器优化
6. 数值/浮点相关
6.1 启用浮点异常检查
gfortran -ffpe-trap=invalid,zero,overflow main.f90 -o main适合抓:
- 除零
- 非法浮点
- 溢出
6.2 保留未优化的浮点行为
有时为了调试数值问题,会减少激进优化:
gfortran -O0 -g main.f90 -o main7. 生成预处理后的源码
7.1 只看预处理结果
gfortran -cpp -E main.F90这会输出预处理后的代码,适合排查:
#include#ifdef- 宏展开
8. 模块和头文件搜索路径
8.1 指定模块/包含文件搜索路径
gfortran -I./include -c main.f90如果 .mod 或 include 文件在别的目录,这个很常用。
9. 生成汇编代码
9.1 输出汇编文件
gfortran -S main.f90会生成 .s 文件,适合做底层分析。
10. 查看版本和帮助
10.1 查看版本
gfortran --version10.2 查看帮助
gfortran --help11. 常见编译模板
11.1 新手调试模板
gfortran -g -O0 -Wall -Wextra -fcheck=all -cpp main.F90 -o main11.2 正式编译模板
gfortran -O2 -march=native -Wall main.f90 -o main11.3 多文件项目模板
gfortran -c mod1.f90gfortran -c mod2.f90gfortran -c main.f90gfortran mod1.o mod2.o main.o -o app12. 常见问题对应命令
12.1 文件里用了 #include,但没生效
gfortran -cpp main.f90 -o main12.2 老代码扩展名不对,但内容是固定格式
gfortran -ffixed-form legacy.f90 -o legacy12.3 老代码扩展名不对,但内容是自由格式
gfortran -ffree-form code.f -o code12.4 想查数组越界
gfortran -fcheck=all -g -O0 main.f90 -o main13. 最实用的一条总结
如果你平时只想记住几条,先记这几个:
gfortran main.f90 -o maingfortran -c main.f90gfortran -g -O0 -Wall -Wextra -fcheck=all main.f90 -o maingfortran -cpp main.F90 -o maingfortran -I./include -c main.f90文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



