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 宏变量:

Qt 编译配置相关总结的更多相关文章

  1. linux kernel编译配置相关

    1 配置界面的搜索功能 “/”可以进行模块搜索,搜索结果里面还有依赖信息.非常方便. 2 在使用纯内核,不实用module的时候,很多情况下出错是因为相应的特性为编译进内核 案例一: 块设备已经发现了 ...

  2. 【计算机视觉】关于OpenCV中GPU配置编译的相关事项

    [计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...

  3. wxWidgets的安装编译、相关配置、问题分析处理

    wxWidgets的安装编译.相关配置.问题分析处理 一.介绍部分 (win7 下的 GUI 效果图见 本篇文章的最后部分截图2张) wxWidgets是一个开源的跨平台的C++构架库(framewo ...

  4. OpenCV编译以及QT Creator配置

    OpenCV编译以及QT Creator配置 在进行编译前,需下载以下工具和源码: CMake ---- 用于编译: 下载地址; https://cmake.org/ 安装在D:\Program Fi ...

  5. Fedora15下搭建QT开发环境及编译QT(提前一键安装完,qt编译所有必需库 yum install gcc-c++ libXtst-devel freetype freetype-devel fontconfig-devel libXrender-devel )

    看了不少linux上编译qt的文章,实际上直接通过yum 安装qt是最方便的,请参考<yum安装qt> 不过初步接触fedora,为了了解一下如何在linux上编译.安装开源代码,所以必须 ...

  6. 转载:Centos7 从零编译配置Memcached

    序言 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. Memca ...

  7. [原创]Centos7 从零编译配置Memcached

    序言 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. Memca ...

  8. 让QT编译快一点(增加基础头文件)

    姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正 ...

  9. Qt编译慢吗?

    1. “用Qt写的程序编译比MFC慢”的说法是错误的绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有 ...

随机推荐

  1. C# Winform程序防止多开的方法总结(亲测)

    1.Winform启动的时候,检测是否存在同样的进程名,防止程序多开: static class Program { /// <summary> /// 应用程序的主入口点. /// &l ...

  2. Spring的增强模式

    一.前置增强 1.IdoSomeService 2.IdoSomeServiceImpl类实现IdoSomeService接口 3.MyBeforeAdvice 实现前置增强方法 4.applicat ...

  3. IT兄弟连 HTML5教程 HTML5的基本语法 简单HTML实例制作

    现在学习HTML5的方式 目前HTML还处于HTML4与HTML5之间的过渡使用阶段.移动端的Web界面开发已经全面使用HTML5的技术,而在PC端由于用户升级浏览器周期较长,面临着页面的兼容性问题, ...

  4. 实现简易JDBC框架

    1 准备 JDBC 基本知识 JDBC元数据知识 反射基本知识 2:  两个问题 业务背景:系统中所有实体对象都涉及到基本的CRUD操作.所有实体的CUD操作代码基本相同,仅仅是发送给数据库的sql语 ...

  5. TCP协议 - 可靠性

    在前篇文章中介绍了TCP协议的三大特性,其中可靠性是依赖一系列的机制,如:校验和,分组发送,超时重传,流量控制得到保证. 一.数据交互 TCP在交互数据时,采用多种机制保证可靠性,同时也保证TCP的性 ...

  6. Scala,Java,Python 3种语言编写Spark WordCount示例

    首先,我先定义一个文件,hello.txt,里面的内容如下: hello sparkhello hadoophello flinkhello storm Scala方式 scala版本是2.11.8. ...

  7. 用redis-dump工具对redis集群所有数据进行导出导入

    安装redis-dump redis-dump是基于ruby开发,需要ruby环境,而且新版本的redis-dump要求2.2.2以上的ruby版本,centos中yum只能安装2.0版本的ruby. ...

  8. Web前端——css

    css 推荐的样式编写顺序: Positioning:定位 Box model:盒子模型.大小等 Typographic:文字系列.排印等 Visual:可视化.背景等 Misc:其它混杂模式 居中 ...

  9. ES6语法:let和const

    ES6新增加了两个重要的JavaScript关键字:let和const 一.let关键字 let声明的变量只在let命令所在的代码块内有效. 1.基本语法 let a='123' 2.let和var的 ...

  10. 接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。

    这个问题原因是因为安装了高版本的office然后卸载掉,又安装了低版本的office导致的. 博主是 office2016卸载后,安装了office2013. EXCEL报错信息为: 无法将类型为“M ...