MsBuild.exe构建Fortran/C混合项目时忽略vfproj的问题与解决
问题分析与解决办法
原因分析
- ALL_BUILD项目的局限性:CMake生成的
ALL_BUILD.vcxproj默认仅关联C/C++类项目(.vcxproj),并未将Fortran项目(.vfproj)纳入其构建依赖链中,因此直接构建ALL_BUILD只会处理C项目。 - 环境未正确加载:若执行
msbuild前未加载Intel Fortran Compiler的环境变量,msbuild无法识别.vfproj项目类型,会直接跳过该类项目的构建。 - 依赖配置缺失:若CMakeLists.txt中未明确建立C项目与Fortran项目的依赖关系,生成的解决方案中C项目不会触发Fortran项目的前置构建,ALL_BUILD自然也不会包含Fortran项目的构建任务。
解决办法
办法一:直接构建整个解决方案
放弃单独构建ALL_BUILD,直接以解决方案文件为目标执行msbuild,它会自动处理所有项目及依赖顺序:
MSBuild.exe /t:build main.sln
该命令会遍历解决方案内的.vfproj和.vcxproj,并根据依赖关系先构建Fortran静态库,再构建依赖它的C项目。
办法二:修复CMake依赖配置(确保ALL_BUILD包含Fortran项目)
修改项目根目录的CMakeLists.txt,明确建立C项目与Fortran项目的依赖关联,让CMake生成的ALL_BUILD自动包含Fortran项目的构建任务:
# 定义Fortran静态库项目 add_library(fortran_proj STATIC ${FORTRAN_SOURCE_FILES}) # 定义C项目,并链接Fortran静态库 add_executable(C_proj ${C_SOURCE_FILES}) target_link_libraries(C_proj PRIVATE fortran_proj)
重新用CMake生成解决方案后,ALL_BUILD会将Fortran项目作为C项目的前置依赖,执行MSBuild.exe /t:build ALL_BUILD时会完整构建两类项目。
办法三:确保msbuild运行在正确的环境中
执行msbuild前,必须加载VS2019和Intel Fortran的环境变量:
- 打开Intel oneAPI Command Prompt for Visual Studio 2019(该终端已预加载所有必要环境);
- 或手动执行环境脚本:
# 加载VS2019环境(路径根据实际安装版本调整) "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" # 加载Intel Fortran环境(路径根据实际安装位置调整) "C:\Program Files (x86)\Intel\oneAPI\compiler\latest\env\vars.bat"
完成环境加载后再执行msbuild命令,即可正常识别并构建.vfproj项目。
内容的提问来源于stack exchange,提问作者Xudong
相关产品推荐
相关产品推荐

