MinGW 与 MSVC 编译的区别
我们可以从 Qt 下载页面看到两种版本编译器,如下图:
我们来对比一下这两个编译器的区别:
- MSVC 是指微软的 VC 编译器。
- MinGW 是 Minimalist GNU on Windows 的缩写。它是一个可自由使用和自由发布的 Windows 特定头文件和使用 GNU 工具集导入库的集合,允许你在 GNU/Linux 和 Windows 平台生成本地的 Windows 程序而不需要第三方 C 运行时库。
这两个都是很好用的编译工具,但是他们兼容的并不好。当你的项目使用 MinGW 编译的使用,想要用一个 MSVC 编译生成的库时就会有问题。使用 MinGW 编译项目的时候,所使用的 Lib 也要是 MinGW 编译的。如果你只是开发 Window 平台的软件时,最好使用 MinGW 编译,这样可以使用大量的第三方 lib,还有很多的构建指令,毕竟 window 上 MSVC 才是王道。
注意:Qt 如果使用 MSVC 编译,需要安装 VS 和Win10 SDK。
Qt 如何使用 MSVC 编译?
若只是在计算机上安装了 Visual Stuido 2015(或其他版本),图中显示的界面上 MSVC2015 的两个编译器的图标会变为带有感叹号的一个黄色图标。Debuggers 页面没有 Windows 的 CDB 调试器,可以用 MSVC 编译器对 Qt Creator 编写的程序进行编译,但是不能调试,这是因为缺少了 Windows Software Development Kit(SDK),这个 SDK 不会随 Visual studio 一同安装,自行下载。可以下载 windows software development kit(SDK)for windows 8.1,安装后重启计算机即可。
Win10 SDK 的安装可以参考:Qt5.9.6使用MSVC(VS2017)开发环境搭建
此时如下图这样配置,只配置了 C 和 C++ 编译器,不能配置调试器。
再在 "项目" 中切换成 MSVC2015_64 编译,此时会报错:C1902: 程序数据库管理器不匹配;请检查安装解决
。解决方法:
到 F:\VS2015\VC\bin 目录下面拷贝 mspdbsrv.exe、mspdb140.dll、mspdbcore.dll、mspdbst.dll 到 F:\VS2015\Common7\IDE 下面,然后重启 Qt 即可。你没有看错,以上确实在 VS2015 安装目录中进行操作,这确实是 Qt 运行时发生的错误!
然后编译运行正常,但是调试会报错,原因正如上面所说还未安装 Win10 SDK。
qmake 是什么?
qmake 是 Qt 提供的一个编译工具,他可以生成与平台无关的 .pro 文件,然后利用该文件生产与平台相关的 Makefile 文件。
Makefile 文件中包含了要创建的目标文件或可执行文件、创建目标文件所依赖的文件和创建每个目标文件时需要运行的命令等信息。最后使用 mingw32-make 工具来完成自动编译(命令行编译的情况),mingw32-make 就是通过读入 Makefile文件 的内容来执行编译工作的。使用 mingw32-make 命令时会为每一个源文件生成一个对应的 .o 目标文件,最后将这些目标文件进行链接来生成最终的可执行文件。
Qt 构建、运行、qmake的区别
**qmake:**根据实际环境创建项目文件 .pro,并且运行 qmak 生成适当的 Makefile。
**构建:**构建是增量编译,只编译有变化部分。
**重新构建:**是把所有部分都重新编译。
运行: 有改动则根据已有的 Makefile 进行编译,执行构建和重新构建时如果没有 Makefile,会根据 .pro 文件等生成Makefile后再编译。
所以一般运行顺序应该是:qmake-构建-运行。
VS 打开编译 Qt 工程,找不到宏定义 QTDIR 的解决办法
打开从以前机器创建的 VS解决方案文件.sln, 发现宏定义${QTDIR}
是以前机器的 Qt 安装目录, 并没有同步更新过来。
解决办法:
(1)使用 VS 打开 .user 文件:
(2)修改 QTDIR 宏变量: