Qt编译报错:Unexpected compiler version, expected Clang 18.0.0 or newer——Qt安装MSVC编译器

截止到本人所使用的Qt6.6.3为止,Qt尚不支持MSVC2022编译器的默认编译器配制。所以,在Qt构建套件中使用MSVC编译器的话,可能仍需要调整Visual Studio版本,或者手动设置MSVC编译器。

如果你的系统安装的是Visual Studio2022,那Qt自动识别的MSVC编译器可能是这样的:

而如果你在构建的时候,使用的套件是MSVC2019,将会报错:Unexpected compiler version。

如:

bash 复制代码
main.cpp:1:10: In included file: static assertion failed: error STL1000: Unexpected compiler version, expected Clang 18.0.0 or newer.
yvals_core.h:: error occurred here

所以,这时候就需要我接下来要说的手动来安装和调整MSVC编译器的设置了。

一、安装MSBuild

1、单独安装MSBuild

由于完整的Visual Studio过于庞大,而MSBuild又相对于来比较优秀,所以在很多时候,单独安装MSBuild就是一个不错的选择。

使用vs_BuildTools.exe可以轻松安装对应版本的MSBuild,以及Qt需要的Windows SDK。

Microsoft C++ 生成工具 - Visual Studiohttps://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/2、完整安装Visual Studio。

完整安装Visual Studio有两种选择:

  • 完整安装Visual Studio 2019。那么就不存在后面的问题了。因为Qt会自动识别其中的MSVC编译器,而且其中的编译器版本是完全能用的。

Qt创建项目 No suitable kits found.-CSDN博客文章浏览阅读4.6k次,点赞4次,收藏10次。个人感觉,安装的重点是编译在Qt里面选择了编译环境,就不要在Developer and Desiner Tools里面选择相应的编译环境。归根结底,Qt出现这个问题,肯定是编译环境有问题了,个人比较喜欢MSVC的编译环境,所以仍然坚持要调试出MSVC的kit。有人说需要是MinGW环境的问题,有人说是Visual Studio的问题,有人说要调整Qt安装。既然是Qt编译环境的问题,把关注的重点也放在了Qt的编译环境安装部分。网上也看了很多的解决方案,但都不得要领,也都没有解决。https://blog.csdn.net/John_Lenon/article/details/130648399这种安装方法存在一些问题,比如vs 2019对于.net框架版本的支持远低于2022。如果你不需要相关功能,完全可以这么操作。

  • 安装Visual Studio 2022。而我们的重点也在后续的调整MSBuild。

二、安装组件的调整Qt构建套件kit

++当前一步操作是建立在你安装了Visual Studio 2022,或者你的设备上有多个MSBuild版本时在用时。++如果你的设备上只有Visual Studio 2019和与之对应的MSBuild,那Qt基本上是可以自动识别的。这部分内容也就可以忽略了。

  • 安装对应的MSBuild

如果你安装了Visual Studio,可以使用Visual Studio Installer(完全安装Visual Studio). 如果没有,可以使用上面推荐的vs_BuildTools(仅安装MSBuild)。

需要确定设备上安装了对应的MSBuild, 及Windows SDK

  • 手动添加Qt编译器

打开Qt-编译-Preferences, 点击构建套件-编译器,然后添加MSVC编译器:

这时候,Qt会自动识别到vcvarsall.bat的路径,如果没有,需要填入相关路径。

然后填写 自定义编译器名称、架构,vcvarsall.bat的其他参数------就是需要填入MSVC编译版本的参数。

我们打开vcvarsall.bat文件,可以直接查看参数的定义:

bash 复制代码
:usage
echo Syntax:
echo     %~nx0 [arch] [platform_type] [winsdk_version] [-vcvars_ver=vc_version] [-vcvars_spectre_libs=spectre_mode]
echo where :
echo     [arch]: x86 ^| amd64 ^| x86_amd64 ^| x86_arm ^| x86_arm64 ^| amd64_x86 ^| amd64_arm ^| amd64_arm64
echo     [platform_type]: {empty} ^| store ^| uwp
echo     [winsdk_version] : full Windows 10 SDK number (e.g. 10.0.10240.0) or "8.1" to use the Windows 8.1 SDK.
echo     [vc_version] : {none} for latest installed VC++ compiler toolset ^|
echo                    "14.0" for VC++ 2015 Compiler Toolset ^|
echo                    "14.xx" for the latest 14.xx.yyyyy toolset installed (e.g. "14.11") ^|
echo                    "14.xx.yyyyy" for a specific full version number (e.g. "14.11.25503")
echo     [spectre_mode] : {none} for libraries without spectre mitigations ^|
echo                      "spectre" for libraries with spectre mitigations
echo:
echo The store parameter sets environment variables to support Universal Windows Platform application
echo development and is an alias for 'uwp'.
echo:
echo For example:
echo     %~nx0 x86_amd64
echo     %~nx0 x86_amd64 10.0.10240.0
echo     %~nx0 x86_arm uwp 10.0.10240.0
echo     %~nx0 x86_arm onecore 10.0.10240.0 -vcvars_ver=14.0
echo     %~nx0 x64 8.1
echo     %~nx0 x64 store 8.1
echo:
echo Please make sure either Visual Studio or C++ Build SKU is installed.
goto :end

比如我需要的是amd64位编译器,MSBuild 2029对应的编译器版本为14.29,那么我需要填的参数就是:amd64 -vcvars_ver=14.29

然后选择对应的ABI信息,点击确定添加就可以了。

  • 编辑和添加构建套件(Kit)

设置编译器完成后,即可到构建套件栏编辑和添加构建套件了。

再回到代码窗口,执行编译,成功!!

相关推荐
小程故事多_802 分钟前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
沐知全栈开发3 分钟前
SQL 日期处理指南
开发语言
黎雁·泠崖6 分钟前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言
黎雁·泠崖10 分钟前
【魔法森林冒险】1/14 项目总览:用Java打造你的第一个回合制冒险游戏
java·开发语言
独好紫罗兰15 分钟前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
C++ 老炮儿的技术栈20 分钟前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
yuuki23323330 分钟前
【C++】继承
开发语言·c++·windows
222you30 分钟前
Redis的主从复制和哨兵机制
java·开发语言
牛奔36 分钟前
如何理解 Go 的调度模型,以及 G / M / P 各自的职责
开发语言·后端·golang
梵刹古音37 分钟前
【C++】 析构函数
开发语言·c++