Sublime Text 需通过自定义构建系统调用 gfortran 编译运行 Fortran 程序;关键步骤包括确认 gfortran 已安装、编写正确 JSON 构建文件、Windows 下使用绝对路径避免 PATH 问题、注意编码与终端交互限制。

Sublime Text 本身不能直接运行 Fortran 程序——它只是个编辑器,没内置编译器或执行环境。你看到的“运行”效果,其实是靠外部命令(比如 gfortran)配合构建系统(Build System)调用实现的。配置错一步,Ctrl+B 就只报错不输出。
怎么让 Sublime 调用 gfortran 编译并运行 .f90 文件
关键不是装插件,而是写对构建系统 JSON 文件,让它知道:源文件在哪、用什么命令编译、生成什么名、要不要清理临时文件。
- 确认已安装
gfortran:终端运行gfortran --version能输出版本号才算成功;Windows 用户推荐用 MinGW-w64 或 MSYS2 安装,别用旧版 TDM-GCC(有路径空格兼容问题) - 在 Sublime 中打开 Tools → Build System → New Build System…,粘贴以下内容(注意替换
gfortran的绝对路径,Windows 下路径含空格必须用双反斜杠或引号包裹):
{
"cmd": ["gfortran", "-o", "${file_base_name}", "${file}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.fortran, source.f90",
"variants": [
{
"name": "Run",
"cmd": ["bash", "-c", "gfortran -o '${file_base_name}' '${file}' && './${file_base_name}'"]
}
]
}
- 保存为
Fortran.sublime-build(自动存进Packages/User/),再手动选中这个构建系统(Tools → Build System → Fortran) - 此时按
Ctrl+B编译,Ctrl+Shift+B选Fortran: Run才会编译+执行
为什么改了 build 文件还是报 “'gfortran' 不是内部或外部命令”
这是 Windows 最常见卡点:Sublime 的构建系统默认不读取系统的 PATH 环境变量(尤其从开始菜单启动时)。它只认绝对路径,或者你手动把 gfortran.exe 所在目录加进 Sublime 启动时的环境。
- 最稳解法:把
"cmd"里的"gfortran"换成完整路径,例如"C:\msys64\ucrt64\bin\gfortran.exe"(注意双反斜杠) - Mac/Linux 用户如果用 Homebrew 安装,路径通常是
/opt/homebrew/bin/gfortran或/usr/local/bin/gfortran,可用which gfortran确认 - 别依赖
shell=True或改 Sublime 的PATH——不同系统行为不一致,且升级后容易失效
运行时报 segmentation fault 或输出乱码,和 Sublime 有关吗
无关。Sublime 只负责调起终端执行二进制,后续全是 gfortran 和你的代码的事。但有两个隐蔽陷阱常被忽略:
- 默认构建系统用的是
cmd(Windows)或sh(Linux/macOS),它们对中文路径、重定向、换行符极其敏感;Fortran 程序里用read(*,*)交互时,Sublime 的输出面板不支持输入,会卡死或跳过——这种必须切到系统终端运行 - 如果你的源文件编码是 GBK(尤其 Windows 记事本保存的),
gfortran默认按 UTF-8 解析,可能报Unclassifiable statement;务必在 Sublime 中用 File → Reopen with Encoding → UTF-8 重新加载,再保存 -
gfortran版本太老(如 4.8)不支持do concurrent或部分iso_c_binding特性,错误信息会指向语法,实际是编译器能力不足
真正麻烦的从来不是配构建系统,而是 Fortran 程序本身对运行时环境的隐式依赖——比如链接数学库要加 -lblas,调用 Python 要配 f2py,这些没法靠一个 JSON 文件解决。先确保 gfortran helloworld.f90 && ./helloworld 在终端能跑通,再回 Sublime 配置。










