qt4的配置与qmake、cmake

qt4的配置与qmake、cmake
qt4的配置与qmake、cmake

目录

1.写这篇文档的目的 (1)

2.什么是框架? (1)

3.关于Qt (1)

4.本文档说明的范围 (2)

5.Qt的下载官网 (2)

5.1 Qt4的32位二进制文件的下载 (2)

6.Qt4编程的简单介绍 (4)

6.1 设置环境变量 (4)

6.2编程、生成工程文件并编译运行 (5)

6.2.1编写“著名的”hello程序 (5)

6.2.2生成工程文件并编译 (7)

6.3编译运行程序 (9)

6.3.1 Debug和Release的区别是什么? (11)

7.qmake (11)

7.1 qmake命令为我们做了什么? (11)

7.1.1认识开源框架的文件架构 (12)

7.1.2 qmake命令生成的VC++工程文件 (13)

7.2 项目文件(.pro) (21)

7.2.1 pri文件和prf文件 (22)

8. cmake (23)

8.1关于CMakeList.txt (30)

9. Qt Creator和Visual Studio Add-in for Qt4的使用(选看) (30)

9.1 Qt Creator (30)

9.2 Visual Studio Add-in for Qt4(VS2010的Qt4插件) (36)

10. Qt Jambi(选看) (38)

1.写这篇文档的目的

之所以写这篇文档,是因为我们做项目或研究IT技术的时候,会用到别人的开源框架(当然也可以自己原创一个框架,但是由于现在国内对于知识产权的氛围并不好,或者高端技术只是集中在少数人手中,所以搞这个的人不多),而别人的开源框架可能会用到Qt,或者qmake、cmake。这时我们就会有中途被卡住的感觉,因为出现了一个新的不懂的工具,顿时觉得困难重重。如果要看一本Qt的书的话又觉得篇幅太大,因为有时我们只是想着先把这个开源框架安装(编译)了再算,完成第一步先,以后再看书还不迟,这样的话只要对Qt有一个大概的了解即可,就不用再慢慢把Qt的书看完了,这样既打乱了计划,又耗费了时间。而且,Qt也是一个开源框架,相对比较简单,初步理解了Qt的话,我们再用其它复杂开源框架的话就会有一个类比,这就可以很好地帮助我们去认识这些复杂的框架了。

2.什么是框架?

注意,框架其实和软件是有一定区别的,最纯粹的软件就是在一个窗口(界面),只需在窗口中操作就能完成所需功能,不需要编程。而框架的主要目的是用于编程的,当我们用一门语言去编程的时候,例如要完成一个医疗仿真,那么就要大量构造这门语言所没有默认提供的类和函数了,那么,为何我们不自己先开发一个特定的关于医疗仿真的类库,然后在编程中调用它们呢?这样就很方便了。框架正是提供这一特定功能的类库。框架可能也有界面,但是其界面并不是主要的,它只是为编程提供辅助,或者生成编程所需要的文件,其主要部分还是编程。例如Qt作为一个框架,它扩展了C++,为C++提供了C++所没有的界面,数据库,多线程,网络编程等的特定功能。虽然Qt也提供界面,并且可以很方便地去设计那些界面组件,但是Qt的设计初衷就是为了能够直观并且友好地进行手工编程,并且对于程序员来说,纯粹通过编写C++源代码来开发整个Qt应用程序并不稀奇。即使我们用了Qt 设计师(Qt Designer),其生成的文件还是必须要整合到编程中才能真正完整地完成一个界面的开发的,即使用了Qt Creator,还是必须要编程的。实际上,包含界面的框架是终究是可以纯粹靠编程而不用界面来完成开发的,这样更具专业性,还是离不开框架的本质。

3.关于Qt

Qt是奇趣科技公司(Trolltech)开发的应用程序框架,主要用于界面开发,而且是跨平台的,Windows,Linux/Unix,Mac OS和嵌入式Linux都能够使用,这也是为什么我的同学学嵌入式的时候会用到Qt的原因。但是,前些年奇趣公司已经被诺基亚收购,后来Qt又被Digia公司收购,因此管理可能有点混乱。

4.本文档说明的范围

因为笔者并不太熟悉Qt5,因此本篇文档只初步介绍Qt4,当然Qt4与Qt5在某些关键地方可能会有不同(笔者之所以这样说,是因为Qt4现在也在保持更新,假如Qt5对Qt4有一个很好的衔接,那么Qt4就不会再更新了),但是大部分都是相同的。读者如果想日后深入了解Qt的话,不妨先看看官方出版的《C++ GUI Qt4编程》(有中文翻译版),Qt5的书可能要过一段时间才出,等不及的话就看这本吧。看完这本的话相信读者就能摸索出Qt5怎么用了。

5.Qt的下载官网

Qt的下载官网是https://www.360docs.net/doc/2d12870325.html,/downloads,如图所示

官网提供了Qt5和Qt4的下载,Qt5把Qt Library(Qt类库,很容易理解,框架的本质就是类库)和Qt Creator(帮助Qt编程的IDE工具,类似Visual Studio、eclipse )集成在一起了。而Qt4中,Qt库还是Qt库,Qt Creator 还是Qt Creator,是分开的。

5.1 Qt4的32位二进制文件的下载

我们主要看Qt4。

前面讲到Qt是跨平台的开源框架,但是,那只是说明Qt的源代码和Qt的编程是跨平台的,而编译器却是平台相关的,因此Qt是一次编写,随处编译,生成的二进制文件是平台相关的,以上绿色粗体字标明的是二进制文件而不是源代码,因此下载的时候,是要选择平台的。我们现在只看Windows,因为Windows是我们常用的系统,而且介绍Windows是一个典型的例子,知道怎样看Windows的话,就应该大概知道其它的下载条目了。

三个都是用于Windows系统,不同的是括号中的内容,选哪个比较合适呢?我们首先要知道括号中minGW4.4,VS2008,VS2010是什么意思,这三个其实都是编译器。这三个下载条目的意思是,以第一个为例,这个Qt4的二进制文件是Qt4的源代码通过minGW4.4编译器编译而生成的,因此我们在调用Qt4的类库来编程的时候,就必须要用回minGW4.4来编译,其余两个依此类推。

笔者因为一直用着VS2010,因此笔者下载的是第三个条目,本文档也以VS2010为例介绍Qt4的编程。

注意:

网上很多介绍Qt4用于VS编程的安装方法极其复杂,需要自行用VS来重新编译Qt4源代码,这是因为那时候Qt官网只提供了Qt4的minGW4.4编译的32位二进制文件,而没有VS的编译版二进制文件。而现在Qt官方为了方便大家已经帮大家提供了VS2008和VS2010的Qt4的32位二进制文件了,因此下载下来只要傻瓜地安装即可,不需要那么复杂。

Qt4源文件的下载

只要点击zip或者tar.gz就可以下载源代码,下载源代码有什么用呢?

其一,是因为可以与开发者有一个充分的交流,发现源代码的缺点,从而改进Qt,这样可以对Qt的完善有一个更快的步伐,并且能够帮助读者熟悉软件的开发,还能够继续传播IT工作者们的自由,分享的高尚精神,对计算机和互联网业有一个健康的发展。

其二,开源对于程序员来说是一个宝贵的财富,程序员可以更深入地了解别人的设计思想,和软件的运行原理。

但是要注意,Qt开源版只用于私人开发和交流,如果要用于商业用途,则必须购买Qt 的商业版,否则违反协议就要付上法律责任的。因此,有些公司干脆自己开发界面了,不用别人的框架,例如迅雷,它用的是自己开发的BOLT界面引擎,做得很好。

其三,注意到Qt官方提供的Qt4二进制文件只有32位的,如果要用Qt4的64位二进制文件,则必须要用到Qt4的源文件,再用编译器调到64位编译模式进行编译,这样比较耗费时间。

不过其实这个只是无路可走时才会这样做,因为我们可以先登录《C++ GUI Qt 4编程》的中文站点https://www.360docs.net/doc/2d12870325.html,/bbs/read.php?tid=11800,或者其它站点,里面有网友自行用各种编译器编译的、32位和64位的Qt提供,我们不妨先看看有没有自己想要的版本下载,若没有的话再自行编译也不迟。

6.Qt4编程的简单介绍

Qt4的二进制文件下载下来之后是一个安装器,执行安装器后安装到任意路径即可,笔者安装到D:\Qt\4.8.5

6.1 设置环境变量

使用开源框架的时候通常都要设置环境变量,这是因为该框架本身带有一些命令,就像单片机本身配备指令集一样,这些命令可以帮助我们使用该框架。这些命令的入口在一些可执行文件(如qmake.exe)中,我们只要在环境变量中添加这些可执行文件(.exe)所在的路径,就能在命令行窗口中使用该命令了。

有过使用开源框架经验的人都会知道,通常我们会把框架的bin目录添加到path环境变量,bin的全称是binaries(二进制文件),用来放置编译生成的文件,可执行文件属于二进制文件。

Qt4的bin路径在笔者的电脑中是D:\Qt\4.8.5\bin,把它添加到path环境变量即可,关于怎样添加环境变量,读者可以自行百度,此处不再赘述。

6.2编程、生成工程文件并编译运行

我们首先打开命令行窗口,XP的话,点击开始>>运行,在文本框中输入cmd再回车即可,win7的话在开始菜单最下面的文本框中输入cmd再回车即可。一个通用的做法是,点击开始>>所有程序>>附件>>命令提示符,就能打开了,个人偏向于这种做法,如果嫌麻烦的话,可以对着命令提示符的图标,右键>>发送到(N)>>桌面快捷方式,这样就可以在桌面上找到该图标并打开使用命令行窗口了,就不会那么麻烦。

打开命令行窗口如图所示:

当我们开始使用命令行窗口的时候,那么恭喜您,您已经步入到初级计算机专家的行列了,因为您已经开始脱离Windows的傻瓜机制,开始向深入计算机系统运行原理的道路前进了。当我们看到其他人用电脑只会点鼠标操作界面的时候,顿时就会产生一些优越感。

6.2.1编写“著名的”hello程序

我们现在先编写一个简单的基于Qt4界面的hello程序,先新建一个记事本,然后重命名为hello.cpp,笔者把该文件放在D:\hello中,如图所示

然后右键>>编辑,打开后输入如下代码:#include

#include

int main(intargc, char *argv[])

{

QApplicationapp(argc, argv);

QLabel *label = new QLabel("Hello Qt!"); label->show();

returnapp.exec();

}

如图所示:

保存退出即可。

6.2.2生成工程文件并编译

我们打开命令行窗口,依次输入如下命令

d: 因为hello文件在d盘中,因此要先输入该文件所在的盘符

cd D:\hello进入hello.cpp所在的文件夹

qmake-project 使用qmake命令,生成pro文件,如果系统不能识别qmake命令,则说明没有添加环境变量

qmake -tpVC hello.pro生成VC++的工程文件

在命令行窗口中先依次输入

d:

cdD:\hello

qmake-project

如图所示:

此时看到D:\hello,生成了一个与平台无关的项目文件hello.pro

继续在命令行窗口中输入

qmake -tpvc hello.pro

如图所示:

此时看到D:\hello,已经生成了VC++工程文件

打开hello.VCxproj,就可以在Visual Studio中编译这个程序了

6.3编译运行程序

点击hello项目再点击左上角的生成,就能够编译该项目了,注意此时的编译模式为Debug。(中途可能会弹出是否保存解决方案,选保存)

生成成功后,点击运行,如图所示:

当弹出如图所示的窗口时,说明运行成功了。(可以把窗口拉大)

此时看到可执行文件hello.exe在D:\hello\debug中,如图所示:

如果我们用release模式编译的话,那么生成的文件就会在release文件夹中了

6.3.1 Debug和Release的区别是什么?

Debug和Release都是编译的模式。

Debug主要是用于调试的,当我们初步编写好了一个程序的时候,可以先用Debug模式编译并运行,看看运行的情况如何,假如出现问题,就能知道问题出现在哪里,从而能够很快地找到问题的根源并着手解决方法。

Release是用于发布的,假如认为编写的程序没有一点问题了,就必须要用Release模式编译了,Release模式编译出来的版本才是真正用于实际的版本。市面上,网络上所有的软件都是用Release模式编译出来的,我们在直接编译别人的开源框架的时候,通常也要用Release模式,因为我们用开源框架的目的是调用它的类库,这是用于实际的,因此要用Release模式编译。

7.qmake

qmake其实是Qt附带的工具,可以讲,有Qt的地方就有qmake,有qmake的地方就有Qt。当我们看到其它开源框架需要用到qmake的时候,以为qmake是该开源框架的作者开发的,其实不然,qmake永远属于Qt,只是该开源框架的作者用到Qt,因此也要使用qmake 罢了,qmake是使用而不是开发。

有两个方面与qmake有关,一个是qmake命令,一个是.pro文件,那么qmake的作用是什么呢?

qmake命令有很多功能,这里只介绍个别的功能。

使用qmake命令可以生成VC++工程文件,这样就方便我们去编译程序,但是要生成工程文件又得有.pro文件,这个还是要靠qmake命令生成。我们先看使用qmake生成工程文件的原理。

首先,必须使用qmake–project命令生成.pro文件,因为这个文件会配置程序的编译过程,例如要编译成一个应用程序还是控制台程序?输出路径在哪里?编程所需要的文件、类库在哪里?都要在.pro文件中设置。不过对于简单的程序,我们通常不用自己设置,因为在生成.pro文件的时候,qmake已经帮我们默认设置好了,即使要自己设置,也只是作一下简单的修改,不会很复杂。

然后,再使用qmake–tpvc *.pro命令,解析.pro文件,于是就生成VC++工程文件了。

7.1 qmake命令为我们做了什么?

可能有人会问,我们为什么不自己直接打开VS2010,然后直接编写Qt4程序呢?这样就不用那么麻烦特意新建一个.cpp文件,然后在用这个命令那个命令生成VC++工程文件那么麻

烦了。

这是一种错误思想,因为qmake所生成的VC++工程文件不同于VS2010默认的工程文件,qmake为我们做了很多事。

7.1.1认识开源框架的文件架构

熟悉开源框架的人都知道,开源框架是有一个固定的文件架构的,看到Qt4的主文件夹,如图所示:

开源框架的主目录中通常都会有bin,examples,include,lib,src,tools等文件夹,其中最主要的是bin,include和lib文件夹

bin:代表binaries,即二进制文件目录,里面包含可执行文件(.exe),对于普通的电脑用户,可能接触最多的就是二进制文件,我们玩游戏,用软件所打开的文件通常都是二进制文件。

include:包含目录,里面提供的是类的头文件,当我们使用框架中的类名的时候,必须要引用该目录中的头文件来声明类。

lib:代表libraries,即库目录,里面提供的是类库,是类的主体,当我们调用类的时候,必须要引用该目录的类库。

examples:例子目录,里面提供一些编程实例。

src: 代表sources,里面提供框架的源代码。

7.1.2 qmake命令生成的VC++工程文件

我们依然以上面提到的hello工程文件作为例子,右键hello项目,点击属性,如图所示:

点击VC++目录,如图所示:

这里可以看到编译器默认的可执行文件目录(bin),包含目录(include),库目录(lib),这些目录可以完成基本的C,C++,VC++的所有编程。

我们重点来看可执行文件目录,点击可执行文件那一行,会出现下拉按钮,点击下拉按钮,再点击<编辑…>,会出现一个对话框,如图所示:

看到继承的值这个列表,里面有很多诸如$(*)的字符串,这些其实就是宏,所谓宏,就是替代,一个很简单的信息代替一个宏大的信息,所以叫做宏。

点击宏(M)>>按钮,对话框被扩展,于是可以看到宏所代表的意思。

我们主要看$(OutDir)和$(Path)

$(OutDir)代表路径debug\,注意,这里的路径是相对路径,即相对hello目录的路径$(Path)就是代表Path环境变量了,也就是说,这个$(Path)也把我们之前添加的Qt4路径的环境变量的值也包含进来了,不过注意,因为环境变量太长,因此右边值的一栏可能不会全部显示出来,但实际上还是把整个环境变量的值引用进来的。

这些对话框只是用来查看的,因此看完可以按取消退出对话框。

现在点击hello属性页中C/C++节点中的常规,如图所示:

点击附加包含目录这一行,打开附加包含目录对话框,如图所示:

可以看到,里面添加了Qt主文件夹中的include目录,还有include目录中的QtCore,QtGui,ActiveQt等目录,这些目录包含着Qt4关于界面的类的头文件。

例如,hello.cpp中用到#include和#include,如图所示

实际上,它们的意思是把QApplication.h和QLabel.h头文件包含进来,但是,VS2010怎么知道QApplication.h和QLabel.h在哪里呢?

其实,VS2010是通过搜索包含文件目录来找到QApplication.h和QLabel.h的。程序会查找包含文件目录和附加包含文件目录(它们其实都是一样的,只是为了不与编译器默认的目录混淆,因此就出现了一个附加目录)有没有这些头文件,如果有就会调用头文件,如果没有的话编译就会出错,编译就会失败了。

有些人会觉得很好奇,我们打开qt4目录中的include目录,发现里面根本没有头文件,为什么还要在附加包含目录中添加该目录呢?如图所示:

这是因为诸如#include<*>中尖括号的内容其实是相对路径名而不是文件名,工程文件中

自动生成的外部依赖项中,有的头文件(例如qnamespace.h)会用到

#include

这时就必须要把include目录添加到附加包含目录中才能够编译成功了。

默认的VS2010工程文件是不会为我们添加这些附加包含目录的,如果要使用默认的VS2010工程文件,必须得手动添加这些目录,而且如果要真正能使得编写的程序能够通过编译,还必须得添加其他目录,因为要添加的目录很多很多,因此这样做非常繁琐。

但实际上我们不需要这么费劲,因为qmake帮我们做了这些事情,之前之所以用qmake 生成VC++工程文件,就是因为qmake在生成VC++工程文件中其实为我们做了很多事,如上面提到的添加附加包含文件目录,和后面的输出文件目录,附加库目录,附加依赖项等。qmake还会生成相应的debug目录和release目录,用来放置生成的文件。qmake为我们做的事太多太多,这里不会一一列举。

我们再点击链接器节点中的常规,如图所示

相关主题
相关文档
最新文档