鉴于Qt良好的跨平台特性,想要将Qt程序编译移植到Maemo平台上,一般都不会遇到太大问题。
关于怎么安装Maemo开发环境请参考CuteQt网站Maemo相关文章,如果你是Linux用户则有更简单的方法,到Nokia论坛去下载最新版的SDK安装程序,是PythonQt界面的,一口气点确认和下一步就可以。
本文关心的主题是怎么将Qt写的应用程序打包成Maemo的deb格式,方便其他人下载和安装。因为Qt的编译系统是利用自有的qmake,和传统GNU automake的方式不太一样,所以有些细节的地方需要注意。下面我们就以Qt的例子应用wiggly为例,一步步来看如何制作Qt的.deb包。(本文操作环境:Maemo5 SDK的ScratchBox环境中)。
1.先建一个空白的编译目录
目录名要求是包名加版本的格式,那么我么建立一个wiggly-3.23的格式(3.23是google离开拆拿到日子,嗯呐)。
2.利用dh_make建立基本的控制文件
进入wiggly-3.23执行以下命令:
DEBFULLNAME=”Cute Qt” dh_make –createorig –single -e cuteqt@cuteqt.com -c gpl
如果你的系统里没有dh_make,需要将”dh-make”的软件包装上,以上命令DEBFULLNAME用于指定发布者的名字,–single是指编译的是当个应用,-e后面加发布者的电子邮件地址,-c后面指的是软件的发布模式,这里指的是GPL. 执行以上命令后可以看到在当前目录下多出来一个debian目录,debian目录下有一些debian工具打包时要用到的文件,暂时跳过。
3.将含源代码的wiggly目录加入编译目录
此时,我们的目录机构应该是主目录下有两个子目录,分别为wiggly-3.23/debian和wiggly-3.23/wiggly,前者包含编译控制文件,后者包含源代码。
4.在wiggly-3.23增加一个top.pro文件
文件内容为
QMAKEVERSION = $$[QMAKE_VERSION]
ISQT4 = $$find(QMAKEVERSION, ^[2-9])
isEmpty( ISQT4 ) {
error(“Use the qmake include with Qt4.4 or greater, on Debian that is
qmake-qt4″);
}
TEMPLATE = subdirs
SUBDIRS = wiggly
前面部分通过qmake版本测得Qt是否为qt4以上版本,后面部分指定子目录,这也是在创建你自己的工程时,根据你的代码目录需要改动的地方。
5.进入源码目录wiggly,修改wiggly.pro
这一步主要改动的是INSTALLS变量,它决定了哪些程序需要打包,以及软件最后在Maemo上的安装路径
//wiggly.pro部分内容
target.path = $$PREFIX/bindesktop.files=wiggly.desktop
desktop.path=/usr/share/applications/hildon/INSTALLS += target desktop
这里,我选择了最基本的两个元素,应用自身和.desktop文件。.desktop是Maemo应用启动程序用于找到应用程序的入口,它包含了程序的图标,以及应用在程序菜单里要显示的名字和应用程序的执行路径等。Maemo5的.desktop文件路径都在/usr/share/applications/hildon/目录下。.pro文件中files指明了要打包的哪些文件,path指安装到新系统时的目的路径。
6.在wiggly需要新增一个wiggly.desktop文件
[Desktop Entry]
Encoding=UTF-8
Version=3.23
Type=Application
Name=Wiggly Example
Exec=/opt/usr/bin/wiggly
Icon=myapp
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable
最关键的变量是Exec,指的是应用程序的路径。如果这个错了,点击应用程序列表里的图标时,这个应用会无法启动。其它部分自己体会:)
7. 回到wiggly-3.23/debian目录中,修改rules文件
该目录中的rules决定了debian在打包时候要执行的操作,核心的区别是传统程序执行./configure && make, Qt的程序是qmake && make
|
|
从上面可以看到,新文件利用新建一个builddir编译目录,并利用qmake来生成Makefile 。 需要注意一点的是PREFIX变量将会在.pro文件里生效,上文wiggly.pro中,我使用了这个变量。设置这个路径的原因是Maemo的根系统分区只有100M左右的空间给用户使用,而/opt是挂载在另一个分区上的,有2G空间,可以避免把根系统装满,导致系统容易崩溃。
因为,新rules新增了buiddir单独做编译,所以make clean和make install也稍有不同,参看下表rules剩余的差异部分。
|
|
8. 执行命令将编译目录打包
在wiggly-3.23目录下执行如下命令
dpkg-buildpackage -rfakeroot -b
此时,在上一级目录将会生成一个名叫wiggly_3.23-1_i386.deb或wiggly_3.23-1_armel.deb的debian包,这取决于你在x86还是arm下做编译。
9. 可以安装了:)
利用fakeroot dpkg -i wiggly_3.23-1_i386.deb就可以将你的应用安装到系统里。在应用程序列表里就能看到它