
简介这份课程资源面向需要在 Visual Studio 2019 上搭建 Fortran 开发环境的高校学生、科研人员与工程技术人员尤其适合零基础或初次接触 Fortran 的读者。内容围绕 VS2019 与 Fortran 的安装配置展开涵盖 HPC Toolkit 高性能计算工具包的获取与自定义安装、路径修改避免占用 C 盘、创建项目时启用 Fortran 语言选项以及运行旧代码时常见的 x64/win32/release/debug 平台配置冲突、vfproj 项目文件迁移与 Fortran-libraries 属性调整等排错思路并附有知乎、哔哩哔哩等在线参考链接。资源包共 1 个 docx 文档约 4.1MB以图文步骤形式记录完整配置流程便于按需查阅与对照操作。目前已有 1653 人学习适合希望快速跑通第一个 Fortran 项目、减少环境配置踩坑时间的读者参考。1. 为什么 2024 年还有人用 VS2019 配 Fortran一次真实的工程选型如果你在 Windows 上做数值计算、CFD、有限元二次开发或者气象/水文模型大概率绕不开 Fortran。Intel oneAPI 的ifort/ifx编译器在 Windows 上默认只跟 Visual Studio 集成而很多单位的生产环境还锁在 VS2019——不是不想升是升级会牵动一堆老项目的.vfproj工程文件、第三方静态库和授权。所以「vs2019Fortran安装和项目运行」这个组合到今天依然是刚需不是怀旧。这篇笔记解决三件事把 VS2019 装干净、把 Fortran 编译器挂进 VS2019、让一个真实的多文件 Fortran 工程能编译能调试能出结果。适合两类人一是第一次在 Windows 上配 Fortran 的学生和转行工程师二是接手了老工程、发现「能编译但断点打不上」的熟手。全程按我实际踩过的顺序写参数和坑都标出来你照着走就行。2. VS2019 安装组件勾选决定后面一半的坑2.1 版本选择与离线安装包的取舍VS2019 有三个主流版本Community社区版个人和学术免费、Professional、Enterprise。做 Fortran 开发Community 完全够用Intel 编译器的集成不区分版本。真正影响你的是工作负载勾选不是版本号。网络热词里「vs2019离线安装包」搜索量一直很高原因很实际很多计算节点在内网或者公司网络对微软 CDN 不友好。离线包的做法是先用官方 bootstrapper 下载布局再拷到目标机器安装# 在能联网的机器上创建离线布局--layout 指定输出目录 vs_community.exe --layout D:\VS2019Layout --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended这条命令的含义--layout把安装文件下载到本地目录而不是直接安装--lang zh-CN只下中文语言包省几个 G--add Microsoft.VisualStudio.Workload.NativeDesktop只下「使用 C 的桌面开发」这一个工作负载--includeRecommended带上该负载的推荐组件。参数怎么改如果你还要做 C# 上位机再加--add Microsoft.VisualStudio.Workload.ManagedDesktop如果磁盘紧张去掉--includeRecommended手动在界面里勾。提示离线布局目录会到 815 GB取决于勾选的工作负载。别放在系统盘。2.2 必须勾选的组件清单安装界面里「使用 C 的桌面开发」这个工作负载默认勾的东西不够。Fortran 集成依赖的是 C 工具链里的 MSBuild 和 VC 工具集下面这几项必须确认勾上组件为什么必须漏勾的后果MSBuildFortran 工程靠它驱动编译工程加载失败提示找不到构建工具MSVC v142 - VS2019 C x64/x86 生成工具链接阶段要用链接报LINK : fatal errorWindows 10 SDK系统库头文件和 lib找不到kernel32.lib之类C 核心功能基础编译器前端工程属性页里没有 Fortran 选项装完之后别急着装 Fortran先验证 VS2019 本身是好的新建一个 C 控制台项目能编译能运行说明 MSBuild 链路通了。这一步能帮你把「VS 的问题」和「Fortran 的问题」分开后面排错省一半时间。2.3 安装后的两个必做检查第一确认 MSBuild 在 PATH 里能被找到。打开「Developer Command Prompt for VS 2019」敲msbuild -version能打印版本号就对了。第二确认 VS2019 的安装目录结构默认在C:\Program Files (x86)\Microsoft Visual Studio\2019\Community记住这个路径后面配 Fortran 环境变量要用。很多人装完 VS2019 直接去装 Intel 编译器结果集成失败回头发现是 VS2019 装的时候没勾 MSBuild。这个顺序别搞反。3. Fortran 编译器选型与安装ifort 还是 ifx3.1 三个可选方案的真实差异Windows 上能用的 Fortran 编译器主要三条路Intel oneAPIifort / ifx和 VS2019 集成最好调试器能打断点、看数组性能优化选项最全是工程界默认选择。缺点是安装包大几个 G需要注册 Intel 账号。ifort是经典编译器ifx是基于 LLVM 的新一代新项目建议直接用ifx老工程如果用了大量 Intel 专有扩展先用ifort保稳。gfortranMinGW-w64免费开源配合 VS Code 很舒服但和 VS2019 的集成是「外挂式」的——VS2019 里没有原生 Fortran 工程模板得靠 Makefile 或 CMake 手动配。热搜词里「matlab support for mingw-w64 c/c/fortran compiler」就是这个路子适合 MATLAB 混合编译场景。NAG Fortran商业编译器标准符合性极好但贵一般只在特定行业用。结论你要的是「vs2019Fortran 项目运行」直接上 Intel oneAPI别折腾 MinGW 集成那是另一条技术栈。3.2 oneAPI 安装与 VS2019 集成下载 Intel oneAPI Base Toolkit HPC ToolkitFortran 编译器在 HPC Toolkit 里。安装时最关键的一步是安装向导会检测已装的 Visual Studio如果它列出了 VS2019勾上集成如果没列出说明你的 VS2019 装得不完整回去补组件。# 安装完成后验证编译器是否可用 # 先激活 oneAPI 环境每次新开终端都要做或用 setvars.bat call C:\Program Files (x86)\Intel\oneAPI\setvars.bat # 检查 ifort 和 ifx 版本 ifort --version ifx --versionsetvars.bat的作用是把编译器、库、环境变量一次性注入当前命令行会话。参数说明如果你装了多个 oneAPI 版本setvars.bat默认激活最新的要指定版本就进对应版本目录执行。验证成功的标志是ifort --version打印出类似Intel(R) Fortran Intel(R) 64 Compiler Classic ... Version 2021.x的信息。集成成功的判断标准打开 VS2019新建项目在模板搜索框里输入「Fortran」能看到「Intel Fortran Console Application」之类的模板。看不到就是集成没成重跑 oneAPI 安装程序选「Modify」把 VS 集成勾上。3.3 环境变量与命令行编译验证在 VS2019 里能建工程之前先用命令行确认编译器本身没问题这样能把「编译器问题」和「IDE 集成问题」分开# 写一个最小测试程序 # test.f90 program hello implicit none integer :: i real :: x x 0.0 do i 1, 10 x x real(i) end do print *, sum , x end program hello# 编译并运行 ifort test.f90 -o test.exe test.exe逻辑说明implicit none强制显式声明变量这是 Fortran 工程代码的硬规矩能挡掉大量拼写错误导致的玄学 bug。real(i)是类型转换Fortran 不会自动把整型提升成实型参与运算。编译参数-o指定输出文件名调试阶段加-g生成调试信息加-traceback让运行时错误打印调用栈优化阶段用-O2或-O3但调试时别开优化否则断点会跳。命令行能跑通再进 VS2019 建工程问题范围就缩小到 IDE 配置了。4. 在 VS2019 里跑通一个多文件 Fortran 工程4.1 新建工程与工程结构VS2019 里File → New → Project选Intel Fortran → Console Application命名比如FortranDemo。建好后默认给你一个Source1.f90。真实工程不会只有一个文件我们按「主程序 模块 子程序」的结构来组织这也是 Fortran 工程最常见的分层方式。右键项目Add → New Item加两个文件math_mod.f90模块放函数和main.f90主程序。把默认的Source1.f90删掉。工程结构如下FortranDemo/ ├── main.f90 # 主程序调用模块 └── math_mod.f90 # 模块定义可复用函数4.2 模块化代码与编译顺序! math_mod.f90 module math_mod implicit none private ! 默认私有只暴露指定接口 public :: vec_sum, vec_mean contains function vec_sum(arr) result(s) real, intent(in) :: arr(:) real :: s s sum(arr) end function vec_sum function vec_mean(arr) result(m) real, intent(in) :: arr(:) real :: m m sum(arr) / real(size(arr)) end function vec_mean end module math_mod! main.f90 program main use math_mod ! 引用模块 implicit none real :: data(5) integer :: i do i 1, 5 data(i) real(i) * 1.5 end do print *, sum , vec_sum(data) print *, mean , vec_mean(data) end program main逻辑说明module是 Fortran 的封装单元private加public ::白名单是工程规范避免命名污染。intent(in)声明参数只读编译器能帮你查错。arr(:)是假定形状数组传数组不用带长度size()自动取。编译顺序上模块必须先于使用它的主程序编译VS2019 的 Intel Fortran 工程会自动分析依赖但如果你手动用命令行编译顺序错了会报「找不到 .mod 文件」。4.3 工程属性里的关键配置项右键项目Properties几个必须确认的地方配置项路径建议值说明配置类型GeneralApplication (.exe)可执行程序平台Generalx64现代机器一律 64 位运行时库Fortran → LibrariesMultithreaded DLL (/libs:dll)默认即可静态链接改 Static调试信息Fortran → DebuggingFull (/debug:full)Debug 配置下必开优化Fortran → OptimizationDisabled (/Od)Debug 下关优化Release 下开 /O2数组边界检查Fortran → Run-timeCheck boundsDebug 下开能抓越界热搜词里「vs2019如何release debug」问的就是这个Debug 配置关优化、开调试信息和边界检查方便断点Release 配置开/O2、关边界检查跑得快。切换在工具栏的下拉框里选别在 Debug 配置下测性能数据没意义。4.4 编译、运行与断点调试按F7或Build → Build Solution编译。成功的话输出窗口显示Build: 1 succeeded。按F5启动调试控制台打印出 sum 和 mean。断点调试是 VS2019 配 Fortran 最值钱的地方。在main.f90的print那行左侧点一下加断点F5运行程序停在那里。这时候可以把鼠标悬停在data上看整个数组的值Intel 调试器支持数组可视化在Watch窗口输入data(3)看单个元素按F10单步F11进入函数内部如果断点是空心圆加感叹号提示「断点不会命中」八成是配置没对上检查是不是在 Release 配置下调试或者代码优化把行号打乱了。Debug 配置 /Od是断点能命中的前提。5. 避坑与排查那些让我重装三次的问题5.1 现象VS2019 里找不到 Fortran 模板原因oneAPI 安装时没检测到 VS2019或者 VS2019 装的时候没勾 MSBuild集成组件没写进去。解决先确认 VS2019 的 MSBuild 可用msbuild -version有输出。然后重跑 oneAPI 安装程序选Modify在集成选项里手动指定 VS2019 路径。还不行就修复安装 VS2019补上「使用 C 的桌面开发」工作负载。5.2 现象编译报error #7002: Error in opening the compiled module file原因模块文件.mod没生成或者编译顺序错了主程序先于模块编译。解决在 VS2019 工程里右键math_mod.f90→Properties→Fortran → General确认它参与编译。如果是命令行先编模块再编主程序ifort -c math_mod.f90然后ifort main.f90 math_mod.obj -o main.exe。.mod文件默认生成在工程中间目录别手动删。5.3 现象链接报unresolved external symbol原因调用了外部库函数但没链接对应的.lib或者函数名修饰name mangling不匹配——常见于 Fortran 调 C 的场景。解决在工程属性Linker → Input → Additional Dependencies里加上库名。Fortran 调 C 函数时C 那边要用extern C或者 Fortran 这边加bind(C)声明否则名字对不上。这是混合编程最经典的翻车点。5.4 现象程序运行结果每次不一样或者数组值莫名其妙原因数组越界或未初始化变量。Fortran 默认不检查边界越界写会踩到别的变量内存表现为「玄学」结果。解决Debug 配置下打开Fortran → Run-time → Check bounds和Check uninitialized variables。这两个选项会拖慢运行但能精确定位到哪一行越界。定位完再关掉跑性能。血泪经验数值计算里 90% 的「结果不对」都是越界或未初始化。5.5 现象Release 下结果和 Debug 下不一致原因开了/O2优化后编译器重排指令如果代码里有依赖未定义行为的写法比如越界读、别名违规优化会放大问题。解决先在 Debug 下用边界检查跑一遍确认没有未定义行为再切 Release。如果必须查优化相关的问题用/O2加/Qparallel之类的选项逐个排除别一上来就全开。记住优化不会改变正确代码的结果只会暴露错误代码的问题。6. 进阶用命令行 CMake 管理 Fortran 工程VS2019 的图形工程适合单人开发但一旦工程要跨平台、要进 CI.vfproj就不够用了。我现在的习惯是用 CMake 描述工程VS2019 只当编辑器和调试器。这样同一份代码在 Windows 用 ifort、在 Linux 用 gfortran 都能编。# CMakeLists.txt cmake_minimum_required(VERSION 3.15) project(FortranDemo Fortran) # 设置 Fortran 标准 set(CMAKE_Fortran_STANDARD 2008) set(CMAKE_Fortran_STANDARD_REQUIRED ON) # 模块输出目录避免 .mod 文件散落 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod) add_executable(demo main.f90 math_mod.f90) # Debug 下开边界检查 if(CMAKE_BUILD_TYPE STREQUAL Debug) target_compile_options(demo PRIVATE /check:bounds /debug:full) endif()配置和构建# 在工程根目录生成 VS2019 工程文件 cmake -S . -B build -G Visual Studio 16 2019 -A x64 # 构建 Debug 版本 cmake --build build --config Debug # 运行 build\Debug\demo.exe参数说明-G Visual Studio 16 2019指定生成器16 对应 VS2019-A x64指定 64 位平台CMAKE_Fortran_MODULE_DIRECTORY把.mod统一放一个目录避免污染源码树。这样生成的build/FortranDemo.sln可以直接用 VS2019 打开断点调试照常但工程描述权在 CMake 手里换机器、换编译器只改一行生成器参数。一个具体技巧CMake 里判断编译器是 ifort 还是 gfortran用if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)然后分别挂不同的编译选项。这样一份 CMakeLists 能同时伺候 Windows 和 Linux团队里用啥的都有也不打架。我自己的习惯是任何超过三个源文件的 Fortran 工程一律先写 CMakeLists 再写代码哪怕当前只在 Windows 上跑。因为迟早会遇到「换台机器编译不过」的情况那时候有 CMake 就是后悔药没有就得手工重建工程。这套组合我用了几年VS2019 负责舒服地写和调CMake 负责可移植地构建各干各的。希望帮到你。本文还有配套的精品资源点击获取