正确在 Windows 上配置 MSVC(2019) 作为 Qt 编译器
本文致力于讲述清楚如何在仅安装 vs 生成工具(不安装完整版本的 visual studio)的情况下配置好环境,使得 Windows+Qt(msvc)+msvc 工具链能正常使用,并能正常单步调试(cdb)。本文极有可能是网上少数讲清楚的教程,反正我自己在解决问题前搜索了大量资料博客。🤓 不想看废话的话,直接跳至 具体操作说明
问题由来
早期版本的 vs 和 vs 生成工具,会自动配置好相关环境(后面会讲到底是指哪里),使得安装 Qt(msvc 版)及 Qtcreator 后无感直接使用。但是新版本的 vs 生成工具(2019)并不会自动配置导致 Qtcreator 安装后无法使用 msvc c++ 编译器。
传统方法
这使得现在在 Windows 上使用 Qt ,在不手动配置下只剩下两种方式:
- 放弃使用 msvc,使用 Qt with MinGW 版本。这样利用 Qt 安装包自带的 MinGW,可以避免环境配置
- 安装完整版本的 visual studio,比如 visual studio 2019 community。完整版本的 vs 会自动配置环境,所以也可以无需手动配置环境。
网上搜索教程大抵上述两种做法。但是,如果想在 Windows 上使用微软自己的编译工具链,又不想安装庞大的完整 vs,就完了,基本上查网上发现可以仅安装 vs 生成工具,这是微软自己提供的单独的 c/c++ 编译器工具链。但是安装完后发现 Qtcreator 里无法自动发现 msvc 编译器,而现版本的 Qtcreator 又不能手动添加 msvc 类型的编译器,这样导致走不下去了,查阅了无数教程依然无果。直到发现这篇讲解 Qtcreator 是如何探测 vs 环境的文章——link。
本教程原理解析
根据上文指出的答案,答主贴出了 Qtcreator 探测 vs 环境的关键代码,原图请看上述链接的知乎原图,看完代码发现(源码之下了无秘密 💯) Qtcreator 查找的逻辑是在指定注册表路径下找:
- 如果是 32 位环境下,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStuidio\SxS\VS7
- 如果是 64 位环境下,
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStuidio\SxS\VS7
然后遍历 SxS 里面的项,
- 如果键名(其实就是数字)大于 14(从 15 开始,即 msvc2017,那就把该键值(其实就是硬盘里的 vs 安装路径)后面拼接上
/VC/Auxiliary/Build
查看此处是不是有vcvarsall.bat
文件 - 否则(即键名小于等于 14),那就把该键值后面拼接上
/VC7
查看此处是不是有vcvarsall.bat
文件
上述 15 代表 msvc2017,16 代表 msvc2019,14 及更小的数字代表更老版本的 msvc,具体版本数字对应关系参见
https://www.cnblogs.com/zjutzz/p/6013783.html 和 https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes 此处的各版本发行说明
如果上述条件下能找到 vcvarsall.bat
文件,那 Qtcreator 就能自动配置好环境,下面是照做说明。
具体操作说明
-
安装 msvc2019 生成工具
打开 https://visualstudio.microsoft.com/zh-hans/downloads/ ,翻到下面的「所有下载」,展开「Visual Studio 2019 工具」,找到「Visual Studio 2019 生成工具」,点击右边的下载。
双击打开,我们只需要「C++ 生成工具」
PS. Qt 5.14 推荐采用 msvc 2017,上图右侧也有 2017的可选项,但是该工具默认链接的是2019版,并且也能正常使用,所以就先不折腾了,保持默认,只勾图中左侧一个勾,右侧会自动勾选默认的几个选项。
然后就耐心等待联网下载和安装。
等安装完就可以关闭了,此后也用不到这里了。
-
安装 Qt 5.14
基本傻瓜化操作。选择组件时看图即可。红色矩形框必选(至少 32 位/64 位选择一个,对于初学者,不勾选 32 位也行),大括号内容建议勾选。
等待一会即可。
-
配置环境(关键步骤)
此时打开 Qtcreator 发现空空如也,果然找不到 msvc 编译器。关闭 Qtcreator。
此时开始做本文的核心操作:
1. 打开注册表`\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio`(如果是32位系统,现在估计少见了,打开`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStuidio\SxS\VS7`)
连续新建两项,见下图,注意层次关系,注意大小写
然后在 VS7 上新建字符串值,名称是16.0,值是 vs生成工具的安装目录下的一个子目录,具体看图中3处和横线处(仔细看图,我没写错),要保证横线处的路径下有红色箭头处的文件。
这里解释一下,16.0 代表是 msvc 的2019版,见上面的原理解析(但其实只要大于14即可,原因也见上面的原理解析)
2. 再次打开 Qtcreator,神奇的事情发生了,Qtcreator 已自动发现并添加好了。
3. 接下来自然是去「构建套件(Kit)」里选择相应编译器即可,看红色箭头。
到此结束。如果想编译 32-bit 程序,那自行在这个界面点击「添加」并选择对应编译器,不再赘述。
-
确认是否能编译程序
新建一个默认项目,看能否正常运行。
-
添加单步调试支持。
到目前为止,已经可以运行程序了,但是无法单步调试。
如果去网上一搜,又是一大堆误导、不适用的信息。其实 vs生成工具自带了 cdb,但是却没有默认启用,这才是关键。
在控制面板——程序里找到`Windows SDK`,点击更改
然后,点 Change
再然后,**勾选 debug tool(这是重点)**
重新打开 Qtcreator,发现已自动探测到 cdb
到「构建套件(Kit)」选项卡配置好调试器,注意选择32位还是64位,要和编译器保持一致。
-
确认是否能单步调试
看图,确实已经可以了。
全文终。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于