qt4的配置与qmake、cmake

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
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的下载官网是/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编程》的中文站点/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 <QApplication>
#include <QLabel>
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<QApplication>和#include<QLabel>,如图所示
实际上,它们的意思是把QApplication.h和QLabel.h头文件包含进来,但是,VS2010怎么知道QApplication.h和QLabel.h在哪里呢?
其实,VS2010是通过搜索包含文件目录来找到QApplication.h和QLabel.h的。

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

有些人会觉得很好奇,我们打开qt4目录中的include目录,发现里面根本没有头文件,为什么还要在附加包含目录中添加该目录呢?如图所示:
这是因为诸如#include<*>中尖括号的内容其实是相对路径名而不是文件名,工程文件中
自动生成的外部依赖项中,有的头文件(例如qnamespace.h)会用到
#include <QtCore/qglobal.h>
这时就必须要把include目录添加到附加包含目录中才能够编译成功了。

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

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

qmake还会生成相应的debug目录和release目录,用来放置生成的文件。

qmake为我们做的事太多太多,这里不会一一列举。

我们再点击链接器节点中的常规,如图所示
在输出文件中,我们可以看到是$(OutDir)\hello.exe,上面提到过,$(OutDir)代表路径debug\,表明可执行文件hello.exe在相对路径debug中生成。

在附加库目录中,添加了d:\Qt\4.8.5\lib,这就是上面提到的库目录,笔者并不知道添加这个目录有什么用,因为笔者删除了d:\Qt\4.8.5\lib这一条目后,编译依然能够通过并成功运行程序。

暂且先记住吧,况且添加这一目录也很简单,只要把lib目录的路径添加进去就可以了。

点击输入,看到附加依赖项,这里添加的目录其实就是Qt4的类库,假如没有添加库文件,编译就会出现无法解析的外部符号的错误:
这里只是介绍了hello属性页中某些主要的条目,当然,qmake还修改了其他一些条目,限于篇幅,不会一一说明。

7.2 项目文件(.pro)
以hello.pro为例,我们用记事本打开自动生成的hello.pro文件
我们看到,实际上,hello.pro文件中的内容其实很简单,这是因为很多变量都是有默认值的,这里只是在默认值的基础上修改。

hello.pro里面提到的变量有:
TEMPLATE:模板,决定该程序的类型,app的意思为单独的应用程序。

TARGET:指定可执行文件或库的基本文件名,这里不填的话就是使用默认值,即当前的目录名。

注意,下面提到的变量用的是+=,表明是在默认值中添加。

DEPENDPATH:应用程序所依赖的搜索路径,这个笔者没见过,个人推测应该对应的是上面提到的附加依赖项。

INCLUDEPATH:指定C++编译器搜索全局头文件的路径,这个变量对应上面提到的附加包含目录。

可能有的读者会问,附加包含目录中添加了这么多目录,为何这里只有一个点?(一个点表示当前目录)这是因为附加包含目录中添加的目录其实都是INCLUDEPATH变量的默认值,实际上当前目录(即一点)也是默认值,只是因为这个项目文件是自动生成的,如果是自己手工编写的话,完全可以不用设置INCLUDEPATH变量。

SOURCES:指定工程的C++实现文件(.cpp)。

实际上,我们还必须知道HEADERS,CONFIG,LIBS,和DESTDIR变量。

HEADERS:指定工程的C++头文件(.h)。

CONFIG:指定各种用于工程配置和编译的参数。

LIBS:指定工程要链接的库,个人觉得这个变量应该才是对应上面的附加依赖项,可能是由于Qt版本的更新,自动生成文件的过程没有跟着及时跟新的缘故。

DESTDIR:指定可执行文件放置的目录,对应上面提到的输出文件。

7.2.1 pri文件和prf文件
上面提到的pro文件中的内容其实是qmake语法,qmake语法是相对简单的语法,但是当开源框架只提供源文件而且要用qmake生成工程文件要我们编译的时候,pro文件可能要包含其他外部文件,会使得项目文件的架构变得非常复杂,因为要考虑到松耦合的设计模式。

常见的被包含的文件有pri文件和prf文件。

pri文件
pri中的i是include的首字母,pri是用于被包含在pro文件中的意思。

例如笔者打开D:\Qt\4.8.5\src\plugins\sqldrivers\mysql\mysql.pro
这里用到了内置函数include()来包含pri文件。

prf文件
prf中的f是feature的首字母,意思是作为配置文件被包含在pro文件中。

和pri文件类似,该文件也是要被包含进pro文件的。

只是,它更隐蔽
你经常和它打交道,可能却一直视而不见。

例如我们在pro文件中用到
CONFIG+=QT
即当我们在CONFIG中指定一个东西时,qmake就会尝试去加载相应的feature文件:Qt安装目录下的mkspecs/features/Qt.prf
QT是CONFIG的标准变量值,当然,我们也可以自创一个CONFIG变量值,如:CONFIG+=peizhi,然后自己再另外编写一个prf文件,如peizhi.prf这样的话pro文件就会把这个prf文件包含进来。

另外我们也可以使用load()函数来加载prf文件,这样就不需要利用CONFIG变量了,如load(peizhi),事实上,开源框架里面用得最多的是load()函数。

因为本文档只是给读者一个初步的了解,因此并不会介绍得详细,如果读者要更深入了解的话,可以看一下Qt的在线文档/doc/或者利用Qt助手(Assistant)进行查询,也可以百度看一下一些中国程序员发布在网站上的关于qmake的信息。

8. cmake
这里要介绍一个第三方编译工具——cmake,cmake不属于Qt,但对Qt提供内置支持,cmake的主要功能与qmake类似,但功能更为强大。

而且它有一个shadow build的功能,这
个功能其实很简单,就是可以选择编译出来的二进制文件的放置路径,这样就可以防止污染源文件了。

cmake需要到/cmake/resources/software.html下载,下载安装器即可,如图所示
下载后傻瓜安装即可。

这里演示cmake需要用到《C++ GUI Qt4 编程》的配套源代码,可以到/store/c-plus-plus-gui-programming-with-qt4-9780132354165这个网址下载,下载链接如图所示
下载下来解压后,我们需要用到chap03中的spreadsheet文件夹,笔者把该文件夹复制到D:\Qt\spreadsheet这个路径。

然后,在这个新的spreadsheet文件夹中新建一个记事本文档,命名为CMakeLists.txt
在里面填写如下内容:
project(spreadsheet)
cmake_minimum_required(VERSION 2.4.0)
find_package(Qt4 REQUIRED)
include(${QT_USE_FILE})
set(spreadsheet_SRCS
cell.cpp
finddialog.cpp
gotocelldialog.cpp
main.cpp
mainwindow.cpp
sortdialog.cpp
spreadsheet.cpp
)
set(spreadsheet_MOC_SRCS
finddialog.h
gotocelldialog.h
mainwindow.h
sortdialog.h
spreadsheet.h
)
set(spreadsheet_UIS
gotocelldialog.ui
sortdialog.ui
)
set(spreadsheet_RCCS
spreadsheet.qrc
)
Qt4_wrap_cpp(spreadsheet_MOCS ${spreadsheet_MOC_SRCS})
Qt4_wrap_ui(spreadsheet_UIS_H ${spreadsheet_UIS})
Qt4_wrap_cpp(spreadsheet_MOC_UI ${spreadsheet_UIS_H})
Qt4_add_resources(spreadsheet_RCC_SRCS ${spreadsheet_RCCS})
add_definitions(-DQT_NO_DEBUG)
include_directories("${PROJECT_BINARY_DIR}")
add_executable(spreadsheet
${spreadsheet_SRCS}
${spreadsheet_MOCS}
${spreadsheet_MOC_UI}
${spreadsheet_RCC_SRCS})
include_directories("${PROJECT_BINARY_DIR}")
target_link_libraries(spreadsheet ${QT_LIBRARIES})
注意,原书的叙述中是没有倒数第二行include_directories("${PROJECT_BINARY_DIR}")的,这是因为原书没有用shadow build,而笔者打算用shadow build,但是编译程序的时候必须用到ui_*.h的头文件,该头文件是在编译的时候生成的,但是该生成的头文件却在自定义的二进制输出路径中生成,因此必须要在附加包含目录中添加该目录,而
include_directories("${PROJECT_BINARY_DIR}")
这一条语句可以做到这一点,类似于qmake的INCLUDEPATH。

再之,原书的叙述中最后一行其实是
target_link_libraries(spreadsheet ${QT_LIBRARIES} pthread)
后面有一个pthread,这是一个线程库,但是笔者的VS2010并没有引用这样一个线程库,甚至可能笔者的电脑根本没有该线程库,因此笔者删除了它。

如图所示:
整个spreadsheet文件夹如图所示:
接着我们要在spreadsheet文件夹中在新建一个文件夹,名字自己定,主要用于shadow build,笔者把名字定为mybuilddir。

最后spreadsheet文件夹如图所示:
接着启动cmake的界面:
在界面中的第一个文本框中填入源代码的路径,在第二个文本框中填入生成的二进制文件的路径,两个文本框中的路径并不相同,这就是shadow build,如图所示:
点击Configure按钮,选择Visual Studio 10,代表生成VS2010的工程文件。

注意Visual Studio 10是32位的编译模式,如果要编译64位文件,则需要用到Visual Studio 10 Win64,但是这样的话,Qt4也必须是64位的。

点击Finish按钮
完成后如图所示:
出现的红色条目是用于配置的,我们不需要配置,再点击Configure,红色消失,配置完成,然后再点击Generate按钮,Generating done后,我们进入D:\Qt\spreadsheet\mybuilddir,就会看到生成了solution文件。

打开spreadsheet.sln后,读者应该知道怎样编译了,因此这里就不再赘述了。

相关文档
最新文档