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. kafka 重放 重播 从某个时间点或者offset开始消费

    转自: https://www.jianshu.com/p/932663e9a226 consumer.subscribe(topicA); consumer.poll(100);//正常订阅topi ...

  2. RST Methodology: “Responsible Tester”

    翻译另一篇James Bach的关于快速软件测试的文章,原文链接:http://www.satisfice.com/blog/archives/1364 在快速软件测试方法论中,我们区分出三种主要角色 ...

  3. GPU跑tf-faster-rcnn demo以及训练自己的数据

    https://blog.csdn.net/qq_39123369/article/details/85245512

  4. vue拖拽组件开发

    vue拖拽组件开发 创建临时vue项目 先查看node和npm版本,怎么安装就不多多bb了 再安装vue-cli npm install vue-cli -g //全局安装 vue-cli 检测是否安 ...

  5. 2018-8-10-win10-uwp-依赖属性

    原文:2018-8-10-win10-uwp-依赖属性 title author date CreateTime categories win10 uwp 依赖属性 lindexi 2018-08-1 ...

  6. .net core的服务器模式和工作站模式

    来源:济南小老虎 .NET Core是一个开源通用的开发框架,具有跨平台能力,我们在享受其性能飙升的同时,也面临了一些问题.通过观察 NetCore 程序的线上运行情况发现 ,负载高的情况下应用程序占 ...

  7. Nagios 钉钉报警

    第一章 创建钉钉应用(用于发送报警信息给单独某个用户) 打开钉钉管理后台: https://oa.dingtalk.com 创建成功后需要记录三个值"AgentID"," ...

  8. Winform中怎样获取项目图片资源并转换为Image对象

    场景 DevExpress的TreeList怎样给树节点设置图标: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10274554 ...

  9. CTF 入门笔记

    站点:http://www.moctf.com/ web1:水题非常简单的题目,直接F12查看元素即可,在HTML代码中,flag被注释了. web2:水题 该题的核心 就是通过HTML代码对输入框进 ...

  10. Android8.1源码编译实践(Mac)

    第0步:版本选择 AOSP版本选择很重要,如果选错了,会造成编译失败等各种问题,编译AOSP对Xcode的版本是有要求的: 比如:AOSP6.0-7.0,要求Xcode的版本是8.3,然而在MacOS ...