当前位置: 首页 > news >正文

MeeGo handset 1.1开发环境[6]:封装*.src.rpm和*.rpm

  在MeeGo handset 1.1开发环境[4][5]中,我们利用QtCreator工具生成了rpm包。我们去看linux的rpm包,对于某个软件包有两个rpm包,一个是*.rpm,一个是*.src.rpm,我们应当将源程序也进行打包,这样在代码管理上会好很多。此外,可能是习惯问题,如果可以脱离QtCreator,直接在linux的命令行中进行编译,打包,我觉得更加方便和自由。本次,我们将记录如何在命令行中将程序打成*.src.rpm和*.rpm包。

  实际以前我们在moblin也探讨过这个问题,在MeeGo Handset SDK 1.1的环境中,利用rpmbuild,我们在作一次。我们还是利用rpmbuild的缺省目录~/rpmbuild。下面是相关的步骤。

步骤一:建立需打包的project小例子

  利用mad建立我们的project,我们可以现查看一下mad可以创建那些类型的project,然后根据需要选择创建。

$ mad pscreate -l
TEMPLATE NAME TYPE DESCRIPTION
lib-simple lib Simple example for C/C++ library
python python Simple example for Python (Qt) application
qt-empty prog Empty project for Qt application
qt-lib-simple lib Simple example for Qt library
qt-simple qtprog Simple example for Qt application
simple prog Simple example for C/C++ application

$ mad -t meego-handset-ia32-1.1 pscreate -t qt-simple test-rpm-0.0.1

  请注意这个project的名字,我们将version信息也加入,这也是rpm包命名的标准方式。在后面我们也会看到spec文件中对文件夹的缺省命名,提供version信息,可以是我们更好的管理不同版本当然源代码,同时也方便打patch。

$ cd test-rpm-0.0.1/
$ mad -t meego-handset-ia32-1.1 qmake

  通过这一步,可以生成Makefile,打开Makefile文件,我们做一些小修改,将涉及绝对路径的修改为相对路径,例如该文件夹的绝对路径在/workspace/meego/test/qt/test-rpm-0.0.1,我们可以查询这个路径,或者查询install,是在target中install desktop文件时会写成绝对路径。因为我们将利用rpmbuild的缺省目录,而且不同环境,安装的绝对路径不一样,所以需要修改。

  这是我们可以直接通过make命令来进行编译。由于是实验打包的情况,我只在*.desktop文件中修改了图标的描述名字,并将源文件中的Hello, World改为其他文字。

步骤二:打包

  当我们确保编译没有出现问题,包括在target上调测后也没有问题,我们准备封装发布的rpm和src.rpm。采用make clean将所有编译内容清除后,将test-rpm-0.0.1/打包为test-rpm-0.0.1.tar.gz。接着我们编写rpm的spec文件,可以直接利用之前QtCreator编写的其他spec文件过来修改,spec文件可以参考:

  • http://wiki.meego.com/Packaging/Guidelines
  • Moblin:kernel编译和rpm打包(二):RPM打包

  下面是这个例子的spec文件test-rpm.spec的内容

$ cat test-rpm.spec
# no post install
#%define __os_install_post %{nil}
# no strip
#%define __strip /bin/true
# no debug package
#%define debug_package %{nil}
# disable automatic dependency processing
#AutoReqProv: no

Name: test-rpm
Version: 0.0.1
Release: 1
License: GPL
Summary: Wei: Test for Meego handset 1.1 *.src.rpm and *.rpm
#Url: <insert url tag>
Group: Qt/Qt Mobility
Source0: %{name}-%{version}.tar.gz
#BuildRequires: pkgconfig(QtCore)
#BuildRequires: libqt-devel

%description
Wei test for Meego handset SDK 1.1 for package *.src.rpm and *.rpm.

%prep
%setup -q

%build
# Add here commands to configure the package.
#%qmake
#qmake -makefile -nocache QMAKE_STRIP=: PREFIX=%{_prefix}

# Add here commands to compile the package.
#make %{?jobs:-j%jobs}
#make %{?_smp_mflags}
make

%install
# Add here commands to install the package.
#%qmake_install
make install INSTALL_ROOT=%{buildroot}

%files
%defattr(-,root,root,-)
%{_prefix}/*

  我们将在rmpbuild的标准目录下来进行,可以直接执行rpmbuild -ba test-rpm.spec,运行会报错,但是会生成正确的缺省路径~/rpmbuild,在该目录下会有以下的目录BUILD/ BUILDROOT/ RPMS/ SOURCES/ SPECS/ SRPMS/,我们将test-、rpm.0.0.1.tar.gz文件copy到SOURCES目录下,将test-rpm.spec文件copy到SPECS/下,进入~/rpmbuild/SPECS目录,执行命令rpmbuild -ba test-rpm.spec,则源文件解压后将存放在BUILD/路径下,在目标机的解压后的文件将在BUILDROOT/下,test-rpm-0.0.1-1.i386.rpm将存放在RPMS/i386/路径下,源文件rpm包test-rpm-0.0.1-1.src.rpm位于SRPMS/。

步骤三:检验

  我们打开模拟器或者目标机,通过网络,将rpm传递上去

$ scp -P 6666 /home/wei/rpmbuild/RPMS/i386/test-rpm-0.0.1-1.i386.rpm meego@localhost:/home/meego

  源文件rpm包用于归档保存,我们删除~/rpmbuild,然后在本地机器进行rpm -ivh xxxx.src.rpm后,我们看到在~/rpmbuild中相关源代码的恢复。我们通过ssh登录模拟器,在/home/meego下,以sudo的身份对rpm进行安装rpm -ivh test-rpm-0.0.1-1.i386.rpm,删除时只需要rpm -e test-rpm即可。安装之后我们可以看到桌面如下左图,点击图片,如右图:

相关链接:我的MeeGo/Moblin相关文章

相关文章:

  • 使用Windows Service Wrapper快速创建一个Windows Service
  • [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [转]activiti5用户任务分配
  • 数据结构:链表 链表按结点中第j个数据属性排序(冒泡排序法)
  • 批处理命令调用WINRAR对文件进行压缩
  • 线段树+树状数组+贪心 HDOJ 5338 ZZX and Permutations
  • 批处理命令拷贝文件
  • 我4年前写的第一个ruby程序
  • c# 调用c DLL 所传参数不正确
  • 离职那天我们复员——Leo网上答疑53
  • Spark工作机制-调度与任务分配
  • DT大数据梦工厂 第74讲
  • TCP SYN-Cookie背后的人和事
  • Unity3D NGUI 点击穿透问题的解决方案
  • ----------
  • 【面试系列】之二:关于js原型
  • fetch 从初识到应用
  • Linux下的乱码问题
  • Mocha测试初探
  • nginx 负载服务器优化
  • Python_网络编程
  • Terraform入门 - 3. 变更基础设施
  • 编写符合Python风格的对象
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于游标的分页接口实现
  • 离散点最小(凸)包围边界查找
  • 浅谈web中前端模板引擎的使用
  • 少走弯路,给Java 1~5 年程序员的建议
  • 实战|智能家居行业移动应用性能分析
  • 数据结构java版之冒泡排序及优化
  • 提醒我喝水chrome插件开发指南
  • 一个项目push到多个远程Git仓库
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • Hibernate主键生成策略及选择
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • (0)Nginx 功能特性
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (九)信息融合方式简介
  • (理论篇)httpmoudle和httphandler一览
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core和.Net Standard直观理解
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net中调用windows performance记录性能信息
  • ::
  • @column注解_MyBatis注解开发 -MyBatis(15)