卸载VS2015,随后安装VS2017后,再使用QT,发现各种报错问题:
切记:在构建项目前,一定要先删除原来的临时目录,比如shadow build对应的目录,否则构建失败的错误会看不懂
- 问题1:
执行qmake时报错,:error: Cannot run compiler 'cl'. Output:
原因:该问题通常是由于由于编译器cl.exe未正确配置或缺失所导致的
解决方案:将cl.exe的路径配置到环境变量Path中即可
使用EveryThing搜索cl.exe,如下:

将对应cl.exe文件的目录,添加到环境变量Path中即可
上图中有四个包含cl.exe的目录,注意不要设置错误,否则可能会出现以下的报错:
Qt5Widgetsd.lib(Qt5Widgetsd.dll):-1: error: LNK1112: 模块计算机类型"x64"与目标计算机类型"x86"冲突
cl.exe是什么?
cl.exe 是微软 Visual Studio 套件中的 Microsoft C/C++ 编译器。它只能在支持 Microsoft Visual Studio for Windows 的操作系统上运行。cl.exe 主要用于将 C 和 C++ 源代码编译成目标文件 (.obj) 并将其链接成可执行文件 (.exe) 或动态链接库 (DLL)。
要使用 cl.exe,首先需要安装 Visual Studio 以及 C 和 C++ 支持。安装完成后,可以在 Visual Studio 的 bin 目录下找到 cl.exe。通常有四个版本:Hostx64-x64,Hostx64-x86,Hostx86-x64,Hostx86-x86。
这四个版本对应着不同的含义,从命名可以看出来,前半部分为当前平台(宿主平台),后半部分为目标平台,Host{宿主平台}\{目标平台}。
| 目录 | 宿主平台 | 目标平台 | 主要用途和场景 |
|---|---|---|---|
| Hostx64\x64 | 64位 x86平台 | 64位 x86平台 | 最常用。在64位x86架构上,编译生成64位程序(库)。性能和兼容性最好。 |
| Hostx64\x86 | 64位 x86平台 | 32 位 x86平台 | 在64位x86架构平台上编译生成32位x86架构的程序(库),用于需要兼容32位依赖库的场景。 |
| Hostx86\x86 | 32位 x86平台 | 32位 x86平台 | 在32位平台上,编译生成32位程序。现代64位平台上较少直接使用。 |
| Hostx86\x64 | 32位 x86平台 | 64位 x86平台 | 在32位平台上,编译生成64位程序。这是一种交叉编译,现在非常罕见。 |
-
核心概念:
宿主平台:指 cl.exe编译器本身运行所需的操作系统环境。Hostx64表示这是一个64位程序,需要在64位Windows上运行。
目标平台:指编译器生成的可执行文件或库所运行的平台。x86输出32位程序,x64输出64位程序。
-
为什么需要这么多版本?
主要是为了支持灵活的开发和部署需求。例如,在当今主流的64位Windows系统上:
开发64位软件时,使用 Hostx64\x64。
开发需要向下兼容的32位软件时,使用 Hostx64\x86。不需要切换到32位系统就能编译32位程序。
- 问题2
编译程序报错:error: C1083: 无法打开包括文件: "type_traits": No such file or directory
根因:这是因为VS对应的头文件目录没有添加到环境变量导致
解决方案:将VS对应的头文件和库文件都添加到环境变量

查看Qt构建的环境变量,发现INCLUDE字段中不包含VS2017 C++ 的头文件
使用Everything搜索:

到环境变量设置,将该目录添加到INCLUDE字段中,如果发现环境变量中没有INCLUDE字段,则新建一个INCLUDE字段,然后将上图中Qt的环境变量都拷贝到新增的字段中,并且将VS的C++头文件目录也添加到该字段中
若报错,无法找到xxx.lib库,则是VS2017 的C++工具中,对应的库文件没有添加到环境变量,同样使用Everything搜索该库文件,然后将其路径添加到环境变量LIB字段中,若环境变量中没有LIB字段,同上操作一样