首页/文章/ 详情

【教程篇】如何在VS Code中优雅的运行Fortran程序?

3月前浏览1224

1. MSYS2的安装与配置

MSYS2(Minimal SYStem 2)简单来说是一个提供了各种工具和库的命令行开发环境,下面放出一段MSYS2官网给出的简介。
MSYS2是一个工具和库的集 合,为您提供了一个易于使用的环境来构建、安装和运行本机 Windows 软件。
它包含一个名为 mintty的命令行终端、bash、git 和 subversion 等版本控制系统、tar 和 awk 等工具,甚至还有 autotools 等构建系统,所有这些都基于Cygwin的修改版本。尽管其中一些核心部分基于 Cygwin,但 MSYS2 的主要重点是为本机 Windows 软件提供构建环境,并且将使用 Cygwin 的部分保持在最低限度。MSYS2 为 GCC、mingw-w64、CPython、CMake、Meson、OpenSSL、FFmpeg、Rust、Ruby 等提供最新的本地构建,仅举几例。
为了提供简单的软件包安装和保持更新的方法,它提供了一个名为 Pacman的软件包管理系统,Arch Linux 用户应该很熟悉它。它带来了许多强大的功能,例如依赖项解析和简单的完整系统升级,以及直接和可重现的包构建。我们的软件包存储库包含2600 多个可随时安装的预构建软件包。
MSYS2的官网为:https://www.msys2.org/
  1. 在官网首页下载安装程序msys2-x86_64-20221028.exe,后面的版本可能会随着更新而发生改变,如果无法下载可以挂VPN或者通过其他途径下载。
  2. 运行安装程序以安装MSYS2。
  3. 安装完成取消勾选立即运行MSYS2,先去修改软件源。找到MSYS2的安装目录\etc\pacman.d文件夹中的mirrorlist.msys、mirrorlist.mingw64和mirrorlist.mingw32三个文件,向其中添加清华和中科大的镜像源。
对于文件mirrorlist.msys,在文件开头添加:
##清华大学开源软件镜像
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
##中国科学技术大学开源软件镜像
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
 
对于文件mirrorlist.mingw32,在文件开头添加:
##清华大学开源软件镜像
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
##中国科学技术大学开源软件镜像
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
 
对于文件mirrorlist.mingw64,在文件开头添加:
##清华大学开源软件镜像
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
##中国科学技术大学开源软件镜像
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
  1. 在开始菜单中找到MSYS2并启动MSYS2 MSYS,在shell中输入如下命令以同步软件库并更新系统到最新状态。
pacman -Syu
至此,MSYS2便已配置完成,后面即可通过MSYS2安装Fortran编译器。

2. Fortran编译器gfortran的安装与配置

在通过MSYS2安装Fortran编译器之前,首先熟悉一下在MSYS2中软件包管理器Pacman的一些基本指令:
pacman -Syu               同步软件库并更新系统到最新状态
pacman -S -h              查看Pacman工具帮助
pacman -Q                 列出所有已安装的软件包
pacman -Ss xx             查询软件xx的信息
pacman -S xx              安装软件xx
pacman -R xx              删除软件xx
因此我们首先通过输入如下指令以搜索Fortran编译器:
pacman -Ss fortran
搜索后将列出一系列编译器,如mingw和clang等,对于64位操作系统,这里选择安装mingw64,对应的搜索结果如下图所示。

因此输入如下命令进行安装:
pacman -S mingw-w64-x86_64-gcc-fortran
在安装完成后,我们还需要将mingw64的工作路径添加的环境变量Path中,首先找到MSYS2安装目录\mingw64\bin文件夹,确保gfortran.exe位于该文件夹,然后将该文件夹路径添加到系统环境变量Path中。这时候我们发现已经可以在命令提示符中调用gfortran了。这里我们给出一个名为hello.f90的Fortran示例源程序。
program hello
   Implicit none

   !$OMP PARALLEL
   print '(a)','Hello'
   !$OMP END PARALLEL

end program hello
我们尝试在源程序所在目录键入如下所示的命令函来编译并执行该程序:
gfortran -o hello hello.f90
hello
由于这是一个并行程序,我们也可以对其执行OpenMP编译命令:
gfortran -fopenmp -o hello hello.f90
hello
至此,Fortran编译器也就已经安装并配置完成。

3. gdb的安装

通过下面的命令搜索:
pacman -Ss gdb
执行安装:
pacman -S mingw64/mingw-w64-x86_64-gdb

4. Python的安装与配置

为了编写Fortran程序时有更好的开发体验,我们还需要用到Python,因此同样在Python官网下载并安装Python。
Python的官网为:https://www.python.org/
在安装过程中同样记得勾选“Add python.exe to PATH”,以将Python.exe所在路径添加到环境变量中,如下图所示。

在安装完成后,我们同样可以通过在命令提示符中键入python检查python是否已经正常安装。如果未能正常安装,则可能需要手动将Python.exe所在路径添加到环境变量中。

5. Visual Studio Code的安装与配置

这里我们选择Visual Studio Code作为我们的Fortran编程环境,首先在VS Code 官网下载并安装好VS Code。
VS Code的官网为:https://code.visualstudio.com/
在安装完成后我们打开VS Code,软件会自动提示安装语言包并将显示语言更改为中文(简体),接受该选项并重启软件。
重启软件后可以发现VS Code仍然处于英文状态,这时可以按下“Ctrl+Shift+P”组合键以显示“命令面板”,然后键入"display"以筛选并显示“Configure Display Language”命令,按下“Enter”键后会按区域显示安装的语言列表,在其中选择中文(简体)以切换语言,然后软件会再次提示重启,重启软件后可以发现VS Code已经切换为中文界面。

6. VS Code插件Modern Fortran的安装与配置

在完成VS Code主体的安装后,就可以安装Fortran编程所需要的一些对应的插件了。首先按下“Ctrl+Shift+X”组合键打开VS Code的插件管理界面,在搜索栏中键入Modern Fortran搜索并安装该插件。在安装完成后,我们再次在VS Code中打开前面创建的名为hello.f90的Fortran示例源文件,可以看到所有代码均已实现高亮显示,在VS Code的终端中键入如下命令以编译并运行该程序:
gfortran -o hello hello.f90
.\hello
可以看到该程序已经能够在VS Code中正常编译并执行。
重启VS Code后我们会发现VS Code会弹出如下所示的错误提示:
Error spawning fortls: Please check that fortran-language-server is installed and in your path。
为了解决该问题,我们需要安装fortran language server,这里我们通过Python的pip工具进行安装,在VS Code的终端中键入如下指令:
pip install fortran-language-server
待安装完成后再次重启VS Code,即可完成fortran language server的安装。

7. VS Code插件fprettify的安装

在VS Code的终端中输入如下所示的命令:
pip install fprettify
在安装完成后,为了应用该插件,我们可以打开VS Code的首选项→设置,在其中输入formatting并搜索,在Fortran>Formatting: Formatter选项中将findent更改为fprettify。更改完成后,只需要在需要执行格式化操作的源代码文件中单击右键,并选择格式化文档,即可自动完成代码整理,以提升程序的可读性。
需要注意的是,fprettify默认是缩进三个空格,如果需要让程序仅缩进两个空格,可以在Fortran>Formatting: Fprettify Args中添加参数--indent=2

8. Fortran源代码的自动编译

下面在VS Code中新建一个名为hello.f90的源文件,hello.f90的源代码如下所示:
program hello
 implicit none
 integer(kind=4)::a(4)=(/1,2,3,4/)
 integer(kind=4)::i

 !$OMP PARALLEL
 do i=1,4
   a(i)=a(i)+1
   write(*,*) a(i)
 end do
 !$OMP END PARALLEL

end program hello
通过如下所示的命令完成上述源文件的编译和链接,并执行该程序:
gfortran -o hello hello.f90
.\hello
如果该程序能够正常编译和执行,则证明基于VS Code的Fortran开发环境已经配置成功。
不过,如果每次在更新代码后都通过上述方式进行编译则非常繁琐,特别是当项目中包含有多个源文件时。因此,我们希望VS Code能够自动帮助我们完成整个项目源代码的编译工作。
下面,我们首先在当前源文件所在工作目录创建一个名为.vscode的文件夹,并在该文件夹中创建一个名为tasks.json的文件,并键入如下所示的内容:
{
    "version""2.0.0",
    "tasks": [
      {
        "label""compile",
        "type""shell",
        "command""gfortran",
        "args": ["-g""${file}""-o""${workspaceRoot}\\${fileBasenameNoExtension}.exe"],
        "problemMatcher": [],
        "group": {
          "kind""build",
          "isDefault"true
        }
      }
    ]
  }
然后按下“Ctrl+Shift+B”即可自动完成源代码的编译工作。这个只能用于单文件编译,对于多文件编译,需要用到make或者cmake等工具。
如果需要完成编译,则需要在该文件夹中创建一个名为launch.json的文件,并键入如下所示的内容:
{
    "version""0.2.0",
    "configurations": [
      {
        "name""(gdb) Fortran",
        "type""cppdbg",
        "request""launch",
        "program""${workspaceFolder}\\${fileBasenameNoExtension}.exe",
        "args": [],
        "stopAtEntry"false,
        "cwd""${workspaceFolder}",
        "environment": [],
        "externalConsole"false,
        "MIMode""gdb",
        "setupCommands": [
          {
            "description""Enable pretty-printing for gdb",
            "text""-enable-pretty-printing",
            "ignoreFailures"true
          }
        ],
        "preLaunchTask""compile"
      }
    ]
  }
在需要调试的位置打上断点,然后按下F5即可进入调试模式。

参考文献

[1] 用 VS Code + MSYS 搞定 Windows 上的 Fortran 开发. URL:  https://stblog.penclub.club/posts/Fortran/

[2] VS Code for Fortran. URL: https://www.bilibili.com/video/BV195411c71L?p=1&vd_source=3e2aa4e8d04cdb5d3d8e4bee573550a7

[3] 现代Fortran编程:拥抱开源Fortran环境,高效使用现代Fortran. URL: https://www.bilibili.com/video/BV1M5411M7Eo/?spm_id_from=333.788.recommend_more_video.15&vd_source=3e2aa4e8d04cdb5d3d8e4bee573550a7


来源:易木木响叮当
Systempython控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-01
最近编辑:3月前
易木木响叮当
硕士 有限元爱好者
获赞 224粉丝 283文章 355课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈