1 Star 0 Fork 35

LUCKY/qtguide

forked from qtguide/qtguide 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ch01-05.htm 12.10 KB
一键复制 编辑 原始数据 按行查看 历史
qtguide 提交于 2015-03-26 21:25 . update ch01-04 and ch01-05
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>ch01-05</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="thumbnailviewer.css" type="text/css">
<script src="thumbnailviewer.js" type="text/javascript">
/***********************************************
* Image Thumbnail Viewer Script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
</script> </head>
<body>
<div class="os1">1.5 认识开发工具</div>
<p> 本节专门介绍开发常用到的 GNU 工具集、MinGW、 CMake 和 Qt 工具集,这些工具虽然不需要完全学会,但是基本的概念和用途必须清楚。
</p>
<div class="os2">1.5.1 GNU 工具集</div>
<p>在上个世纪八十年代,计算机都是奢侈品,操作系统里最著名的是 Unix 家族, 当时还没有 Windows、Linux之类的,Unix
系统都是商业软件,里面的应用软件也是商业软件, 全是封闭的环境。系统程序员 Richard M. Stallman (RMS)
在此环境下创立了与众不同的 GNU 项目 (GNU's Not Unix) , 以及推进自由软件发展的 Free Software
Foundation (FSF) 自由软件基金会。 GNU 项目是为了创建自由的类 Unix
系统,也因此开发出来很多开源的系统工具,其中非常著名的就是 GCC (GNU Compiler Collection,GNU编译器套件)。 在
GNU 工具集里面,开发时常见到的几个罗列如下(这些工具通常位于 Linux 或 Unix 系统里的 /usr/bin/ 目录):<br>
</p>
<table class="tabel">
<tbody>
<tr>
<td style="width: 95px;"><b>gcc</b></td>
<td> GNU C 语言编译器。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>g++</b></td>
<td> GNU C++ 语言编译器。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>ld</b></td>
<td> GNU 链接器,将目标文件和库文件链接起来,创建可执行程序和动态链接库。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>ar</b></td>
<td> 生成静态库 .a ,可以编辑和管理静态链接库。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>make</b></td>
<td> 生成器,可以根据 makefile 文件自动编译链接生成可执行程序或库文件。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>gdb</b></td>
<td> 调试器,用于调试可执行程序。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>ldd</b></td>
<td> 查看可执行文件依赖的共享库(扩展名 .so,也叫动态链接库)。 </td>
</tr>
</tbody>
</table>
<br>
GNU 项目主页: <a href="http://www.gnu.org/" target="new">http://www.gnu.org/</a>
<br>
FSF 基金会主页: <a href="http://www.fsf.org" target="new">http://www.fsf.org</a>
<p></p>
<div class="os2">1.5.2 MinGW</div>
<p> 原本 GNU 工具只在 Linux/Unix 系统里才有,随着 Windows 系统的广泛使用, 为了在 Windows 系统里可以使用 GNU
工具,诞生了 MinGW(Minimalist GNU for Windows) 项目,利用 MinGW 就可以生成 Windows 里面的 exe
程序和 dll 链接库。 需要注意的是,MinGW 与 Linux/Unix 系统里 GNU 工具集的有些区别:</p>
<ul>
<li>MinGW 里面工具带有扩展名 .exe, Linux/Unix 系统里工具通常都是没有扩展名的。 </li>
<li>MinGW 里面的生成器文件名为 mingw32-make.exe,Linux/Unix 系统里就叫 make。 </li>
<li>MinGW 在链接时是链接到 *.a 库引用文件,生成的可执行程序运行时依赖 *.dll,而 Linux/Unix
系统里链接时和运行时都是使用 *.so 。</li>
</ul>
<p>另外 MinGW 里也没有 ldd 工具,因为 Windows 不使用 .so 共享库文件。如果要查看 Windows
里可执行文件的依赖库,需要使用微软自家的 Dependency Walker 工具。 Windows 里面动态库扩展名为 .dll,MinGW
可以通过 dlltool 来生成用于创建和使用动态链接库需要的文件,如 .def 和 .lib。 </p>
<p> MinGW 原本是用于生成 32 位程序的,随着 64 位系统流行起来, 从 MinGW 分离出来了 MinGW-w64
项目,该项目同时支持生成 64 位和 32 位程序。 Qt 的 MinGW 版本库就是使用 MinGW-w64 项目里面的工具集生成的。 前面
1.3 节安装的 MinGW 4.9.1 也就是 MinGW-w64 项目里发布的工具集。 </p>
<p> 另外提一下,由于 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 工具等。 </p>
<p> MinGW 项目主页(含 MSYS):<a href="http://www.mingw.org/" target="new">
http://www.mingw.org/</a> <br>
MinGW-w64 项目主页:<a href="http://sourceforge.net/projects/mingw-w64/" target="new">
http://sourceforge.net/projects/mingw-w64/</a> <br>
MSYS2 项目主页:<a href="http://sourceforge.net/projects/msys2/" target="new">
http://sourceforge.net/projects/msys2/</a> </p>
<div class="os2">1.5.3 CMake</div>
<p> CMake(Cross platform Make)是一个开源的跨平台自动化构建工具, 可以跨平台地生成各式各样的 makefile 或者
project 文件, 支持利用各种编译工具生成可执行程序或链接库。CMake 自己不编译程序, 它相当于用自己的构建脚本
CMakeLists.txt,叫各种编译工具集去生成可执行程序或链接库。 一般用于编译程序的 makefile 文件比较复杂,自己去编写比较麻烦,
而利用 CMake ,就可以编写相对简单的 CMakeLists.txt ,由 CMake 根据 CMakeLists.txt 自动生成
makefile,然后就可以用 make 生成可执行程序或链接库。 </p>
<p> 本教程里面是使用 Qt 官方的 qmake 工具生成 makefile 文件,没有用 CMake。 这里之所以提 CMake,是因为整个 KDE
桌面环境的茫茫多程序都是用 CMake 脚本构建的, 另外跨平台的程序/库如 Boost C++
Libraries、OpenCV、LLVM、Clang 等也都是用 CMake 脚本构建的。 以后如果接触到这些东西,是需要了解 CMake 的。
</p>
<p> CMake 项目主页:<a href="http://www.cmake.org/" target="new">
http://www.cmake.org/</a><br>
KDE 项目主页:<a href="https://www.kde.org/" target="new"> https://www.kde.org/</a>
</p>
<div class="os2">1.5.4 Qt工具集</div>
<p> Qt 官方的开发环境安装包里有自己专门的开发工具,之前用过 qmake 命令。 qmake 是 Qt 开发最核心的工具,既可以生成 Qt
项目文件 .pro , 也可以自动生成项目的 Makefile 文件。这里将常用的 Qt 开发工具列表如下:<br>
</p>
<table class="tabel">
<tbody>
<tr>
<td style="width: 95px;"><b>qmake</b></td>
<td> 核心的项目构建工具,可以生成跨平台的 .pro 项目文件,并能依据不同操作系统和编译工具生成相应的
Makefile,用于构建可执行程序或链接库。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>uic</b></td>
<td> User Interface Compiler,用户界面编译器,Qt 使用 XML 语法格式的 .ui 文件定义用户界面,uic
根据 .ui 文件生成用于创建用户界面的 C++ 代码头文件,比如 ui_*****.h 。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>moc</b></td>
<td> Meta-Object Compiler,元对象编译器,moc 处理 C++ 头文件的类定义里面的 Q_OBJECT
宏,它会生成源代码文件,比如 moc_*****.cpp ,其中包含相应类的元对象代码,元对象代码主要用于实现 Qt
信号/槽机制、运行时类型定义、动态属性系统。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>rcc</b></td>
<td> Resource Compiler,资源文件编译器,负责在项目构建过程中编译 .qrc 资源文件,将资源嵌入到最终的 Qt
程序里。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>qtcreator</b></td>
<td> 集成开发环境,包含项目生成管理、代码编辑、图形界面可视化编辑、 编译生成、程序调试、上下文帮助、版本控制系统集成等众多功能,
还支持手机和嵌入式设备的程序生成部署。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>assistant</b></td>
<td> Qt 助手,帮助文档浏览查询工具,Qt 库所有模块和开发工具的帮助文档、示例代码等都可以检索到,是 Qt
开发必备神器,也可用于自学 Qt。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>designer</b></td>
<td> Qt 设计师,专门用于可视化编辑图形用户界面(所见即所得),生成 .ui 文件用于 Qt 项目。 </td>
</tr>
<tr class="d1">
<td style="width: 95px;"><b>linguist</b></td>
<td> Qt 语言家,代码里用 tr() 宏包裹的就是可翻译的字符串,开发人员可用 lupdate 命令生成项目的待翻译字符串文件
.ts,用 linguist 翻译多国语言 .ts ,翻译完成后用 lrelease 命令生成 .qm
文件,然后就可用于多国语言界面显示。 </td>
</tr>
<tr>
<td style="width: 95px;"><b>qmlscene</b></td>
<td> 在 Qt 4.x 里是用 qmlviewer 进行 QML 程序的原型设计和测试,Qt 5 用 qmlscene 取代了旧的
qmlviewer。新的 qmlscene 另外还支持 Qt 5 中的新特性 scenegraph 。 </td>
</tr>
</tbody>
</table>
<p></p>
<br>
<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="width: 40%;">
<div style="text-align: center;"><a href="ch01-04.htm"><img class="pic"
style="width: 32px; height: 32px;" alt="prev" src="images/pics/prev.png"></a></div>
</td>
<td style="width: 20%;">
<div style="text-align: center;"><a href="contents.htm"><img class="pic"
style="width: 32px; height: 32px;" alt="contents" src="images/pics/contents.png"></a></div>
</td>
<td style="width: 40%;">
<div style="text-align: center;"><a href="ch01-06.htm"><img class="pic"
style="width: 32px; height: 32px;" alt="next" src="images/pics/next.png"></a></div>
</td>
</tr>
</tbody>
</table>
</body>
</html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
HTML
1
https://gitee.com/liaoqingfu/qtguide.git
[email protected]:liaoqingfu/qtguide.git
liaoqingfu
qtguide
qtguide
master

搜索帮助