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

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/ 目录):
 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冒个泡

好久没有上来了。也没有什么好说的。最近在做基于SVG开发的一个实时监测系统,感觉目前SVG性能还不是太好,客户端CPU不经意间就达到80%以上了。向老板提出辞职,不过老板没有同意,最终协商结果再做三个月,直到新人完全接…

发一个自己写的2440驱动1602的资料(电路+代码)

上个星期把MINI2440板上的富余数据线引了出来,看着以前丢下的1602突然有了想用ARM9驱动它的冲动,于是就开始干了。 代码是从以前刚学C51的时候改的,呵呵,看见以前写的代码真觉得很烂,现在已经整理好了。 虽说有点牛刀…

【转】10.Qt编程涉及的术语和名词

本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字,它们不一定专属于 Qt,在其它的 C/C 开发过程中也会使用到。 Project Project 的中文翻译是“项目”或者“工程”,这里的项目是指为实现某个相对独立功能的程序代码合集,这…

VS2005开发WinCE6.0应用程序 更换SDK后工程的移植

在应用VS2005开发嵌入式应用程序的时候,一旦平台的SDK发生改变,原先的应用程序就打不开了。搞的偶是非常郁闷,一旦添加了或者更改了驱动程序,重新导出平台SDK以后都要重新建工程,再把代码拷贝到新的工程中,…

【转】17.Qt界面布局管理详解

在上一节,通过一个简单的应用程序,分析了 Qt 创建的 GUI 应用程序中各个文件的作用,剖析了可视化设计的UI文件是如何被转换为 C 的类定义,并自动创建界面的。这些是使用 Qt Creator 可视化设计用户界面,并使各个部分融…

SQL Server 清空或删除所有数据库表中的数据

方法一&#xff1a; --生成数据库脚本的方法最快,处理的也最好 sql2000企业管理器 --右键要清理的数据库 --所有任务 --生成SQL脚本 --<常规>里选择"生成全部对象脚本"","在脚本文件中包含说明性标题&quo…

linux mysql移植_linux 下mysql 移植设置方法

环境:db01:10.10.10.101db03:10.10.10.103需求:将db01上mysql做完整移植,迁移到db03详细步骤:1. 打包db01上/app目录并scp到db03上:#tar -cvzf mysql.tar.gz /app/;scp mysql.tar.gz 10.10.10.103:/root/2. copy db01上/etc/ld.so.conf.d/mysql.conf到db03相应目录下,即/etc/ld…

【转】18.Qt信号与槽机制详解

信号&#xff1a;事件 槽&#xff1a;事件处理函数 信号与槽&#xff08;Signal & Slot&#xff09;是 Qt 编程的基础&#xff0c;也是 Qt 的一大创新。因为有了信号与槽的编程机制&#xff0c;在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。 信号&#xff0…

可以买的一本书:3D计算机图形学(原书第3版)

作  者&#xff08;英&#xff09;沃特&#xff08;Watt,A.) ,包宏 译出 版 社机械工业出版社图书定价&#xffe5;69.00 第1章 计算机图形学的数学基础 11.1 处理三维结构 11.1.1 计算机图形学中的三维仿射变换 11.1.2 改变坐标系的变换 61.2 结构变形变换 71.3 向量和计算机…

网站中毒

刚做了一个网站2008-应届生-校园招聘信息博客 购买了虚拟空间&#xff0c;可是发布没几天就发现中毒了打开网站首页&#xff0c;查看源文件&#xff0c;发现页面头部被加了一段代码 下载有关的文件并没有这行代码&#xff1f;不知道为什么&#xff1f;这段代码到底加到哪里了呢…

程序员找工作那点事儿

从7月中旬回武汉之后开始系统的复习&#xff0c;到9月下旬正式开始找工作&#xff0c;最后到10月中旬结束&#xff0c;前后历时三个月&#xff0c;从前期的职业定位&#xff0c;到中期的复习准备&#xff0c;最后到后期真枪实弹的笔试面试&#xff0c;个人感觉找工作就是个系统…

【转】QT介绍

一、Qt介绍 Qt&#xff0c;坦白来说&#xff0c;并不只是一个界面库&#xff0c;他是C编程思想的集大成者。它是一个经过完善的C应用程序框架。使用Qt&#xff0c;在一定程度上你获得的是一个“一站式”、“全方位”的解决方案&#xff0c;STL、string、XML、数据库、网络这些…

mysql函数未定义_未定义的函数,MYSQL错误

提交以下表单时&#xff0c;我收到此错误&#xff1a;Fatal error: Call to undefined function mysqli_connect() in .... mailing_list_include.php on line 7这里是mailing_list_include.php文件 - 真正的东西包括访问数据库的正确凭据function doDB() {global $mysqli;// c…

简单的实现RAII封装。

简单的实现RAII封装。前面的文章中介绍了通过RAII的技术实现保证资源被释放和某函数被执行的类似finally关键字的功能。并演示了一个通过boost的function和bind的两个库实现的通用RAII封装类。 那个例子固然通用而有效&#xff0c;然而&#xff0c;我们有时项目中并没有用到boo…

二叉树序列化

文件的大小尽可能的小。 想了四种方法&#xff1a; 第一种方法&#xff1a;把二叉树按前序和中序遍历一遍&#xff0c;存两次二叉树。 第二种方法&#xff1a;将二叉树按左枝为0&#xff0c;右枝为1进行路径编码&#xff0c;那么每个节点都可以表示成&#xff0c;节点信息和路径…

【转】OWIN是什么?

OWIN的英文全称是Open Web Interface for .NET。 如果仅从名称上解析&#xff0c;可以得出这样的信息&#xff1a;OWIN是针对.NET平台的开放Web接口。 那Web接口是谁和谁之间的接口呢&#xff1f;是Web应用程序与Web服务器之间的接口&#xff0c;OWIN就是.NET Web应用程序与W…

java 切换panel会闪烁_【19期】为什么Java线程没有Running状态?

Java虚拟机层面所暴露给我们的状态&#xff0c;与操作系统底层的线程状态是两个不同层面的事。具体而言&#xff0c;这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态&#xff1a;什么是 RUNNABLE&#xff1f;直接看它的 Javadoc 中的说明&am…

winCE下Unicode编码

Unicode &#xff1a;宽字节字符集1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数&#xff1f;可以调用Microsoft Visual C的运行期库包含函数_mbslen来操作多字节&#xff08;既包括单字节也包括双字节&#xff09;字符串。调用strlen函数&#xff0c;无…

【转】PSTools工具使用方法

转自&#xff1a;https://blog.csdn.net/hongkaihua1987/article/details/85230082 https://blog.51cto.com/winhe/1742633 本篇文章是基于pstools 2.7版本。pstools是sysinternals出的一个功能强大的nt/2k远程管理工具包。 它的主页为http://www.sysinternals.com/ 下载地址…

多标签文本分类数据集_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...

原文&#xff1a;Label-Specific Document Representation for Multi-Label Text Classification&#xff08;EMNLP 2019&#xff09;多标签文本分类摘要&#xff1a;本文使用标签相关的注意力网络学习文档表示。该方法在构建文档表示时使用了标签的语义信息来决定标签和文档的…