如何发布基于Maemo5的Qt程序(打包.deb格式)

 

鉴于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/bin

desktop.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

//debian/rules原始文件
configure: configure-stamp
configure-stamp:
dh_testdir
# Add here commands to configure the package.
touch configure-stamp
build-stamp: configure-stamp
dh_testdir
# Add here commands to compile the package.
$(MAKE)
#docbook-to-man debian/wiggly.sgml > wiggly.1
touch $@
build: build-stamp

// debian/rules 改动后的文件
builddir:
mkdir -p builddir
builddir/Makefile:builddir
cd builddir && qmakePREFIX=/opt/usr../top.pro
build-stamp: builddir/Makefile
dh_testdir
# Add here commands to compile the package.
cd builddir && $(MAKE)
#docbook-to-man debian/wiggly.sgml > wiggly.1
touch $@
build: build-stamp

从上面可以看到,新文件利用新建一个builddir编译目录,并利用qmake来生成Makefile 。 需要注意一点的是PREFIX变量将会在.pro文件里生效,上文wiggly.pro中,我使用了这个变量。设置这个路径的原因是Maemo的根系统分区只有100M左右的空间给用户使用,而/opt是挂载在另一个分区上的,有2G空间,可以避免把根系统装满,导致系统容易崩溃。

因为,新rules新增了buiddir单独做编译,所以make clean和make install也稍有不同,参看下表rules剩余的差异部分。

// debian/rules原文件
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp# Add here commands to clean up after the build process.
-$(MAKE) clean

dh_clean

install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs

# Add here commands to install the package into debian/wiggly.
$(MAKE) DESTDIR=$(CURDIR)/debian/wiggly install

//debian/rules改动后文件
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
# Add here commands to clean up after the build process.
#-$(MAKE) clean
rm -rf builddir
dh_cleaninstall: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs

# Add here commands to install the package into debian/wiggly.
cd builddir && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/wiggly install

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就可以将你的应用安装到系统里。在应用程序列表里就能看到它

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值