博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何发布基于Maemo5的Qt程序(打包.deb格式)
阅读量:2437 次
发布时间:2019-05-10

本文共 3777 字,大约阅读时间需要 12 分钟。

原文链接:

 

鉴于Qt良好的跨平台特性,想要将Qt程序编译移植到Maemo平台上,一般都不会遇到太大问题。

关于怎么安装Maemo开发环境请参考文章,如果你是Linux用户则有更简单的方法,到Nokia论坛去,是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就可以将你的应用安装到系统里。在应用程序列表里就能看到它

 

转载地址:http://inkqb.baihongyu.com/

你可能感兴趣的文章
学习C++编程语言的最大难度是什么(转)
查看>>
Stan Lippman:C++/CLI全景体验(转)
查看>>
用C语言技术进行CGI程序设计(转)
查看>>
用C语言实现常见的三种中文内码转换(转)
查看>>
用C++程序删除文本文件中以“//”开头的行(转)
查看>>
用C++ Builder来定制系统菜单(转)
查看>>
C++语言代码检查工具PC-Lint简介(转)
查看>>
从模板中分离出参数无关的代码(转)
查看>>
C++常用字符串处理函数及使用示例(转)
查看>>
C#实现Web文件上传的两种方法(转)
查看>>
用C++ Builder检测Windows的启动模式(转)
查看>>
Linux会是第二个微软吗(转)
查看>>
C++中用函数模板实现和优化抽象操作(转)
查看>>
C++继承性应用实例 日期和时间(转)
查看>>
C++类型转换时定义非成员函数(转)
查看>>
crontab命令简介(转)
查看>>
C++中的静态联编和动态联编介绍(转)
查看>>
带有农历的日历(QT版本1752-2100)(转)
查看>>
LINUX的系统内核空间的保护(转)
查看>>
在Visual C++中利用UDL文件建ADO连接(转)
查看>>