Qt 不是凭空产生的,它是基于现有工具链打造而成的,它所使用的编译器、链接器、调试器等都不是自己的,Qt 官方只是开发了上层工具。下面我们分几个部分讲解 Qt 使用到的工具链。

GNU 工具集

在上个世纪八十年代,计算机都是奢侈品,操作系统里最著名的是 Unix 家族, 当时还没有 Windows、Linux 之类的,Unix 系统都是商业软件,里面的应用软件也是商业软件, 全是封闭的环境。

系统程序员 Richard M. Stallman (RMS) 在此环境下创立了与众不同的 GNU 项目 (GNU's Not Unix) , 以及推进自由软件发展的 Free Software Foundation (FSF) 自由软件基金会。

GNU 项目是为了创建自由的类 Unix 系统,也因此开发出来很多开源的系统工具,其中非常著名的就是 GCC (GNU Compiler Collection,GNU编译器套件)。

现在我们知道,GUN 开发类 Unix 系统的项目失败了,但是它开发的一系列工具集却用到了后来的 Linux 内核上,两者结合形成了今天的各种 Linux 发行版,有兴趣的读者请转到《Linux和UNIX的关系及区别》了解更多。

在 GNU 工具集里面,开发时常见到的几个罗列如下(这些工具通常位于 Linux 或 Unix 系统里的 /usr/bin/ 目录):

工具 说明
gcc GNU C 语言编译器。
g++ GNU C++ 语言编译器。
ld GNU 链接器,将目标文件和库文件链接起来,创建可执行程序和动态链接库。
ar 生成静态库 .a ,可以编辑和管理静态链接库。
make 生成器,可以根据 makefile 文件自动编译链接生成可执行程序或库文件。
gdb 调试器,用于调试可执行程序。
ldd 查看可执行文件依赖的共享库(扩展名 .so,也叫动态链接库)。

MinGW

原本 GNU 工具只在 Linux/Unix 系统里才有,随着 Windows 系统的广泛使用, 为了在 Windows 系统里可以使用 GNU 工具,诞生了 MinGW(Minimalist GNU for Windows) 项目,利用 MinGW 就可以生成 Windows 里面的 exe 程序和 dll 链接库。

需要注意的是,MinGW 与 Linux/Unix 系统里 GNU 工具集的有些区别:

  • MinGW 里面工具带有扩展名 .exe, Linux/Unix 系统里工具通常都是没有扩展名的。
  • MinGW 里面的生成器文件名为 mingw32-make.exe,Linux/Unix 系统里就叫 make。
  • MinGW 在链接时是链接到 *.a 库引用文件,生成的可执行程序运行时依赖 *.dll,而 Linux/Unix 系统里链接时和运行时都是使用 *.so 。

另外 MinGW 里也没有 ldd 工具,因为 Windows 不使用 .so 共享库文件。如果要查看 Windows 里可执行文件的依赖库,需要使用微软自家的 Dependency Walker 工具。Windows 里面动态库扩展名为 .dll,MinGW 可以通过 dlltool 来生成用于创建和使用动态链接库需要的文件,如 .def 和 .lib

MinGW 原本是用于生成 32 位程序的,随着 64 位系统流行起来, 从 MinGW 分离出来了 MinGW-w64 项目,该项目同时支持生成 64 位和 32 位程序。Qt 的 MinGW 版本库就是使用 MinGW-w64 项目里面的工具集生成的。

MSYS(Minimal SYStem)

另外提一下,由于 MinGW 本身主要就是编译链接等工具和头文件、库文件,并不包含系统管理、文件操作之类的 Shell 环境, 这对希望用类 Unix 命令的开发者来说还是不够用的。 所以 MinGW 官方又推出了 MSYS(Minimal SYStem),相当于是一个部署在 Windows 系统里面的小型 Unix 系统环境, 移植了很多 Unix/Linux 命令行工具和配置文件等等,是对 MinGW 的扩展。

MSYS 对于熟悉 Unix/Linux 系统环境或者要尝试学习 Unix/Linux 系统的人都是一种便利。MSYS 和 MinGW 的安装升级都是通过其官方的 mingw-get 工具实现,二者是统一下载安装管理的。

对于 MinGW-w64 项目,它对应的小型系统环境叫 MSYS2(Minimal SYStem 2),MSYS2 是 MSYS 的衍生版,不仅支持 64 位系统和 32 位系统,还有自己的独特的软件包管理工具,它从 Arch Linux 系统里移植了 pacman 软件管理工具,所以装了 MSYS2 之后,可以直接通过 pacman 来下载安装软件,而且可以自动解决依赖关系、方便系统升级等。装了 MSYS2 之后,不需要自己去下载 MinGW-w64,可以直接用 pacman 命令安装编译链接工具和 git 工具等。

MinGW 项目主页(含 MSYS): http://www.mingw.org/
MinGW-w64 项目主页: https://sourceforge.net/projects/mingw-w64/
MSYS2 项目主页: https://sourceforge.net/projects/msys2/

CMake

CMake(Cross platform Make)是一个开源的跨平台自动化构建工具, 可以跨平台地生成各式各样的 makefile 或者 project 文件, 支持利用各种编译工具生成可执行程序或链接库。

CMake 自己不编译程序, 它相当于用自己的构建脚本 CMakeLists.txt,叫各种编译工具集去生成可执行程序或链接库。

一般用于编译程序的 makefile 文件比较复杂,自己去编写比较麻烦, 而利用 CMake ,就可以编写相对简单的 CMakeLists.txt ,由 CMake 根据 CMakeLists.txt 自动生成 makefile,然后就可以用 make 生成可执行程序或链接库。

本教程里面是使用 Qt 官方的 qmake 工具生成 makefile 文件,没有用 CMake。这里之所以提 CMake,是因为整个 KDE 桌面环境的茫茫多程序都是用 CMake 脚本构建的,另外跨平台的程序/库如 Boost C++ Libraries、OpenCV、LLVM、Clang 等也都是用 CMake 脚本构建的。以后如果接触到这些东西,是需要了解 CMake 的。

CMake 项目主页:https://cmake.org/
KDE 项目主页:https://www.kde.org/

Qt 工具集

Qt 官方的开发环境安装包里有自己专门的开发工具,之前用过 qmake 命令。qmake 是 Qt 开发最核心的工具,既可以生成 Qt 项目文件 .pro ,也可以自动生成项目的 Makefile 文件。

这里将常用的 Qt 开发工具列表如下:

工具 说明
qmake 核心的项目构建工具,可以生成跨平台的 .pro 项目文件,并能依据不同操作系统和编译工具生成相应的 Makefile,用于构建可执行程序或链接库。
uic User Interface Compiler,用户界面编译器,Qt 使用 XML 语法格式的 .ui 文件定义用户界面,uic 根据 .ui 文件生成用于创建用户界面的 C++ 代码头文件,比如 ui_*****.h 。
moc Meta-Object Compiler,元对象编译器,moc 处理 C++ 头文件的类定义里面的 Q_OBJECT 宏,它会生成源代码文件,比如 moc_*****.cpp ,其中包含相应类的元对象代码,元对象代码主要用于实现 Qt 信号/槽机制、运行时类型定义、动态属性系统。
rcc Resource Compiler,资源文件编译器,负责在项目构建过程中编译 .qrc 资源文件,将资源嵌入到最终的 Qt 程序里。
qtcreator 集成开发环境,包含项目生成管理、代码编辑、图形界面可视化编辑、 编译生成、程序调试、上下文帮助、版本控制系统集成等众多功能, 还支持手机和嵌入式设备的程序生成部署。
assistant Qt 助手,帮助文档浏览查询工具,Qt 库所有模块和开发工具的帮助文档、示例代码等都可以检索到,是 Qt 开发必备神器,也可用于自学 Qt。
designer Qt 设计师,专门用于可视化编辑图形用户界面(所见即所得),生成 .ui 文件用于 Qt 项目。
linguist Qt 语言家,代码里用 tr() 宏包裹的就是可翻译的字符串,开发人员可用 lupdate 命令生成项目的待翻译字符串文件 .ts,用 linguist 翻译多国语言 .ts ,翻译完成后用 lrelease 命令生成 .qm 文件,然后就可用于多国语言界面显示。
qmlscene 在 Qt 4.x 里是用 qmlviewer 进行 QML 程序的原型设计和测试,Qt 5 用 qmlscene 取代了旧的 qmlviewer。新的 qmlscene 另外还支持 Qt 5 中的新特性 scenegraph 。

【转】09.认识一下Qt用到的开发工具相关推荐

  1. Ubuntu 17.10安装Qt 5.10环境与Qt Creator 4.5开发工具(转自linux公社)

    记录下在Ubuntu 17.10搭建Qt环境与安装Qt Creator开发工具的过程.机器装的Linux是Ubuntu 17.10,16.04与17.04的应该也相同. Qt 5.10和Qt 3D S ...

  2. qt控制程序打开记事本_基于QT记事本应用程序开发.doc

    基于QT记事本应用程序开发 基于QT记事本应用程序开发 [摘要]本文通过对嵌入式Linux和Qt的分析,利用Qt在源代码级上能够实现跨平台特性,在源代码开放的Linux操作系统上,根据嵌入式应用的特点 ...

  3. 基于QT框架的软件开发

    QT入门科普 初识QT 更新到QT6: QT的许可类型 QT与C++ QT美与丑 技术选型偏重 未来发展趋势 个人发展路线 初识QT Qt 是一个1991年由Qt Company开发的跨平台C++图形 ...

  4. 《基于Qt的VR编辑器开发》(Yanlz+Unity+SteamVR+5G+AI+VR云游戏+Qt+编辑器+跨平台+人机交互+触发事件+立钻哥哥+==)

    <基于Qt的VR编辑器开发> <基于Qt的VR编辑器开发> 版本 作者 参与者 完成日期 备注 YanlzFramework_Qt_V01_1.0 严立钻 2019.09.04 ...

  5. QT Creator应用程序开发——01简单按钮显示

    目录 前言 一.新建项目 二.设计ui页面和编写程序 (一)设计ui页面 1.设置按钮 2.设置标签 3.设置转到槽 (二)编写程序 (三)构建运行 (三)测试 结语 前言 本系列文章,是经博主的QT ...

  6. pyqt 界面关闭信号_木辛老师的编程课堂之Python和Qt实战慕课软件开发:增加关闭按钮...

    软件实战开始,快速提供编程能力:通过实战,分析产品需求,梳理设计需求,提升项目分析和架构的能力.快点跟着木辛老师一起学习吧! 请点击右上角"关注"按钮关注我们哟:跟着木辛老师学习P ...

  7. Qt + Python + OpenCV图标替换工具 之 Qt界面设计(四)

    目录 上一篇博文 程序的下载地址以及源码 Qt界面设计 上一篇博文 Qt + Python + OpenCV图标替换工具 之 Python调用dll(三) https://blog.csdn.net/ ...

  8. Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)

    目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...

  9. Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二)

    目录 上一篇博文 程序的下载地址以及源码 获取颜色及生成图片 判断颜色 生成转换后的图片 上一篇博文 Qt + Python + OpenCV图标替换工具 之 项目介绍(一) https://blog ...

最新文章

  1. (转)Javascript面向对象编程(二):构造函数的继承
  2. asp.net拦截器
  3. android快捷开发之Retrofit网络加载框架的简单使用
  4. 针对新手的Java EE7和Maven项目–第8部分
  5. Logistic混沌序列加密
  6. ubuntu指向python3_ubuntu安装python3.7,并更新python默认指向为python3.7
  7. 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(tensorflow函数)(一)
  8. 周鸿祎内部讲话:大公司要创新,就必须做小
  9. java list t 类_Java ListT 、List?、ListObject、ListE、ListU的区别
  10. 关于64位CentOS上ptrace报linux/user.h no such file 错误的解决方法
  11. 联想拯救者Y7000p拆机换压条(轴盖)
  12. “食尸鬼行动”攻击30多个国家超过130家企业 包括中国
  13. shiro原理_java:shiro高级篇——4
  14. vulstack2(hydra爆mssql、免杀360、cs、msf渗透、weblogic、computer brower服务支持6118,域管密码过期kerberos认证错误导致部分域服务不可用)
  15. 新氧科技CEO金星直播背后:助推产业线上化,打造医美“新基建”
  16. ipv6环境搭建来测试
  17. 2022 第三届字节跳动青训营,后端专场,课程报名,笔记 纲要
  18. Open cv的Canny边缘检测和轮廓检测例子
  19. 淘宝滞销宝贝怎么处理?面对滞销宝贝怎么正确处理?
  20. Values in v:2 index key pattern cannot be of type object

热门文章

  1. IT职业就业-学长有话说(二)
  2. python学习(八)定制类和枚举
  3. 微信小程序UI组件、开发框架、实用库...
  4. EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器...
  5. POJ 2240题(Floyd)
  6. 基于知识图谱的问答系统实践
  7. [Leedcode][JAVA][第202题][快乐数]
  8. php 函数 数组 难学,php 数组的常用函数
  9. redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper
  10. 回溯——伯努利装错信封问题