`
DevDiv.net
  • 浏览: 23636 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

bld.inf、.mmp和.pkg文件浅析

阅读更多
作者:Vincent
原贴地址:http://www.devdiv.net/thread-4346-1-2.html


对于每一个项目,都必须有一个工程引导文件bld.inf和一个项目定义文件.mmp。bld.inf文件可能引用一个或多个.mmp文件,每个.mmp文件对应一个将要生成的组件。

一、工程引导文件bld.inf
其实是一个脚本,它告诉build环境在做build之前需要准备或知道一些什么东西,最普通的写法是:
PRJ_MMPFILES
HelloWorld.mmp
这是告诉build环境,你马上要处理的工程文件名字叫HelloWorld.mmp。
如果做比较复杂的程序可能需要同时build所有的库,那么就在这里把你所有需要build的工程都列出来:
PRJ_MMPFILES
Project.mmp
Project_lib1.mmp
Project_lib2.mmp
另外一个常用的标记是PRJ_PLATFORMS。它告诉编译环境,以下的这些平台(Targets)是需要编译的。
PRJ_PLATFORMS
WINS ARMI WINSCW
或者直接使用:
PRJ_PLATFORMS
DEFAULT
注意:如果在bld.inf中不做PRJ_PLATFORMS标记,其效果相当于PRJ_PLATFORMS DEFAULT,也就是说这个标记不是必须的。
第三个常用标记是PRJ_EXPORTS。它告诉编译器在编译之前需要把哪些文件先拷贝到指定位置。举个例子,如果你的工程里面需要include一个第三方的*.inl文件,那么如果编译之前这个文件不存在就会编译不过,那么可以这样写:
PRJ_EXPORTS
.\nk_set.inl \epoc32\include
那么,编译时,一个perl脚本会首先把你工程目录下的nk_set.inl文件拷贝到\epoc32\include目录下,然后再编译。
大多数的bld.inf文家需要这三个标记就够了,还有一点小技巧,就是可以在其中使用#if   #else等东西,比如:
#if defined(WINS)
…….//注意没有{ }
else
…….
#endif

二、项目定义文件.mmp
这个文件的内容要比bld.inf文件复杂的多。
先看一下HelloWorldbasic.mmp文件的内容:
TARGET            HelloWorldBasic.app
TARGETTYPE        app
UID               0x100039CE 0x10005B91
TARGETPATH        \system\apps\helloworldbasic
SOURCEPATH        ..\src
SOURCE            HelloWorldBasic.cpp
SOURCE            HelloWorldBasicApplication.cpp
SOURCE            HelloWorldBasicAppView.cpp
SOURCE            HelloWorldBasicAppUi.cpp
SOURCE            HelloWorldBasicDocument.cpp
SOURCEPATH        ..\group
RESOURCE          HelloWorldBasic.rss
USERINCLUDE       ..\inc
SYSTEMINCLUDE     \epoc32\include
LIBRARY           euser.lib
LIBRARY           apparc.lib
LIBRARY           cone.lib
LIBRARY           eikcore.lib
LIBRARY           avkon.lib
.mmp文件以平台无关和编译器无关的方法指定项目组件的属性。
(1)TARGET:应用程序的名称,该名称必须具有正确的文件扩展名:.exe、.app、.dll等
(2)TARGETTYPE:定义为app(该选项确定UID1的值),意味着这是一个GUI应用程序,还存在许多其他类型,包括dll、exe、tsy、csy和ldd。
(3)UID:指定GUI应用程序的唯一系统标志符。
(4)TARGETPATH:最终生成的应用程序及其组件所在的位置,总是位于\system\apps\下面,该目录相对于设备驱动器、模拟驱动盘(例如C:)或模拟ROM(Z:)驱动盘的根目录。
(5)SOURCEPATH:项目源文件的位置路径。
(6)LANG:若应用程序支持不同语言,则使用该语句。每种支持的语句具有两位数字的代码。
(7)SOURCE:指定项目源文件的名称。可以多次使用该语句,并且在每条语句上可以有多个文件名。
(8)RESOURCE:指定资源文件。
(9)USERINCLUDE和SYSTEMINCLUDE:指定应用程序特有的头文件的位置。
(10)LIBRARY:列出需要链接的应用程序框架和图形库――这些是对应于共享库DLL的.lib文件,将在运行时调用这些DLL函数。
(11)AIF:指定应用程序信息文件(.aif),该文件包含应用程序资源文件中定义的图标和其他应用程序属性。
针对于项目定义文件,我们看一下其中部分关键词的详细解释:
(1) UID:全球唯一性标志符,由32位二进制数字构成。在symbian os中,通过UID类型标志对象,UID类型具有3个组件UID:UID1、UID2、UID3。
UID1:确定文件是文档还是可执行码,应将它看作一个系统级的标志符,用于区分可执行文件、DLL等文件。.mmp文件中的TARGETTYPE语句确定UID1。
UID2:对于文档文件,UID2确定文档类型(应用程序数据文件或.aif文件)。对于可执行代码文件,UID2确定可执行文件的类型(.app、.dll、.tsy)。对于可执行文件,在.mmp文件中的UID行上指定UID2和UID3。
UID3:是一个应用程序级的标志符,应用程序的UID3必须不同于其他所有应用程序。只有symbian才可以发布这些值。通过电子邮件到symbian获取,开发实验时,可以使用0x01000000~0x0FFFFFFF,但发布时不能再使用。
Symbian os使用UID将文档(数据文件)和.aif文件与它们各自的应用程序关联起来;UID3包含在每个数据文件、可执行文件或.aif文件的头部。然而,可执行文件和它们的组件仍然需要具有正确的文件扩展名,否则它们将无法正确运行。
当应用程序创建文档文件时,应用程序框架将所有的3个UID和32位的检查总数自动合并到头文件的前16个字节。
(2)AIF文件
在运行时使用.aif文件,并且存储关于应用程序的数据。包括:
a、两种大小的图标
b、各种功能,例如文档嵌入、新文件的建立、是否隐藏应用程序以及MIME类型支持的优先级。
c、可选地使用支持语言的应用程序标题(名称)。
如果没有.aif文件,应用程序将使用默认的图标、以应用程序名称(省略扩展名)作为标题。
图标:
网格和列表视图使用42×29象素的图标,然而状态面板的上下文面板(当应用程序具有焦点时显示在屏幕的顶部)使用44×44的图标。
提供不同的图标大小有助于确保系统可以使用最合适的大小。如果只提供一种大小,那么显示时就会缩放,损坏图标质量。
这种位图文件格式称为多重位图文件格式(.mbm),有相应的工具Aifbuilder来设计这种位图。
AIF文件本地化:
如果应用程序根据不同的语言而提供不同的图标,通过使用扩展名.axx保存产生的每个本地化.aif文件,其中xx是与适当地区关联的两位数字语言码。
标题:
Series60 UI和应用程序框架Avkon提供了将标题和应用程序关联的可选功能――相比于一般通过.aif文件提供标题的功能,应该优先使用这种功能。默认情况下,系统将使用.aif文件中的标题。然而,很可能应用程序创建一个单独的标题文件,同事包含普通长度标题和简短标题――简短标题用于网格视图,普通标题用于列表视图。使用创建普通GUI资源文件的方法得到标题文件。对于HelloWorld项目,标题源文件是HelloWorld_caption.rss,在运行时使用二进制输出文件为HelloWorld_caption.rsc。如果需要,可以为每种语言产生单独的标题文件。
通过将额外的行添加到应用程序的.mmp文件:
RESOURCE:HelloWorld_caption.rss

三、.pkg文件
pkg文件也就是安装包配置文件,是制作Symbian OS安装程序的核心部分。它包含了制作安装文件所需要的全部信息。为了生成.sis文件,必须首先编写.pkg文件。因此制作Symbian程序安装文件的过程,实际上主要就是编写pkg文件的过程。pkg文件像Symbian的资源文件一样,有自己完整的语法体系,掌握了pkg文件的语法,就基本上掌握了制作安装程序的大部分知识,所以熟悉pkg文件的结构,对于制作安装程序来说,是非常重要的。
举例(HelloWorld.pkg):
;
; Installation file for HelloWorld application
;
;Languages
&EN
;
; UID is the app's UID
;
#{"HelloWorld"},(0x0D0A2843),1,0,0
;
;Supports Series 60 v 2.0
;This line indicates that this installation is for the Series 60 platform v2.0
;This line must appear _exactly_ as shown below in the sis file
;If this line is missing or incorrect, the sis file will not be able
;to be installed on Series 60 v2.0 platforms
(0x101F7960), 0, 0, 0, {"Series60ProductID"}
;
; Four files to install
; Symbols set up for the source location are Carbide.c++ specific symbols
"$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\HelloWorld.app"         -"!:\system\apps\HelloWorld\HelloWorld.app"
"$(EPOCROOT)epoc32\data\z\system\apps\HelloWorld\HelloWorld.rsc"         -"!:\system\apps\HelloWorld\HelloWorld.rsc"
"$(EPOCROOT)epoc32\data\z\system\apps\HelloWorld\HelloWorld_caption.rsc" -"!:\system\apps\HelloWorld\HelloWorld_caption.rsc"
"$(EPOCROOT)epoc32\data\z\system\apps\HelloWorld\HelloWorld.aif"         -"!:\system\apps\HelloWorld\HelloWorld.aif"
这个pkg文件是完整的,只要把文件目录适当调整一下,就可以可以使用了。
下面对这个文件的各个部分依次做一些解释说明:
·以分号开始的行,是注释。这些注释主要是给开发人员看的,生成器会忽略它们。
·&EN,表示安装程序使用的语言。EN表示使用美国英语,具体的代码的意义可以在SDK中查到,这里不详细列出。sis文件支持多语言安装,可以在这里进行设置,比如,&EN,FR,IT,表示是多语言的。对于多语言的安装程序,有一些语法和规则与其对应,具体的使用方法请查阅SDK。如果你只是希望可以做出一个安装程序,那么使用&EN就可以,不过需要保证后面出现的字符串部分使用英文字母。
·#{"HelloWorld"}, (0x0D0A2843),1,0,0。这是标准Symbian SIS文件的头部。所有的pkg都必须包含这行,而且必须在语言设置的后面。其中HelloWorld是程序的名字,在安装过程中,可能会使用。 0x0D0A2843,是所开发程序的UID,具体点说就是mmp文件中UID项的后面那个数字。接下来的数字,依次是主版本号,副版本号,和创建号,这些号码用于安装程序的版本控制。
·(0x101F7960), 0, 0, 0, {"Series60ProductID"}。这一句说明了这个程序在安装之前需要准备的组件,实际上就是要求必须是Series60的平台。如果还需要其它的组件,也需要在这里说明。0x101F7960,是组件的UID,它其实表示的是S60 2.0的平台,对于S60 2.1的平台,应该是0x101F9115。0,0,0分别是主副版本号和创建号,Series60ProductID则是当需要显示的时候用于向用户显示的说明文字。
·最后就是实际操作的语句了。第一个双引号中的是文件的源位置,它只的是编译后的文件在PC中的位置。你可以使用绝对位置,也可以像例子那样使用相对位置。第二个双引号中的是文件在目标机器中的位置。“!:”表示由用户来选择安装在哪个驱动器下面,如果不想由用户指定,可以使用 “C:”,表示安装在电话的C驱动下面。这两行语句表示的意思就是将指定位置的文件复制到电话的指定位置中。还有很丰富的语法,请查看S60的SDK。
分享到:
评论

相关推荐

    Symbian编程工程配置文件bld.inf、.mmp和.pkg文件结构浅析

    ### Symbian编程工程配置文件解析:bld.inf、.mmp和.pkg文件结构 #### 一、bld.inf:工程引导文件 bld.inf文件是Symbian编译环境中非常关键的一个配置文件,它主要负责指导构建环境如何正确地进行项目的编译。通过...

    控制台的调试

    参考链接中的文章《bld.inf、.mmp 和.pkg 文件浅析》可以深入学习这方面的知识。 总之,调试Symbian控制台程序涉及到对系统环境的理解,以及正确配置和使用构建工具。通过上述方法,开发者可以有效地在Carbide....

    一个基于Qt Creator(qt,C++)实现中国象棋人机对战

    qt 一个基于Qt Creator(qt,C++)实现中国象棋人机对战.

    热带雨林自驾游自然奇观探索.doc

    热带雨林自驾游自然奇观探索

    冰川湖自驾游冰雪交融景象.doc

    冰川湖自驾游冰雪交融景象

    C51 单片机数码管使用 Keil项目C语言源码

    C51 单片机数码管使用 Keil项目C语言源码

    基于智能算法的无人机路径规划研究 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    前端分析-2023071100789s12

    前端分析-2023071100789s12

    Delphi 12.3控件之Laz-制作了一些窗体和对话框样式.7z

    Laz_制作了一些窗体和对话框样式.7z

    ocaml-docs-4.05.0-6.el7.x64-86.rpm.tar.gz

    1、文件内容:ocaml-docs-4.05.0-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ocaml-docs-4.05.0-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    学习笔记-沁恒第六讲-米醋

    学习笔记-沁恒第六讲-米醋

    工业机器人技术讲解【36页】.pptx

    工业机器人技术讲解【36页】

    基于CentOS 7和Docker环境下安装和配置Elasticsearch数据库

    内容概要:本文档详细介绍了在 CentOS 7 上利用 Docker 容器化环境来部署和配置 Elasticsearch 数据库的过程。首先概述了 Elasticsearch 的特点及其主要应用场景如全文检索、日志和数据分析等,并强调了其分布式架构带来的高性能与可扩展性。之后针对具体的安装流程进行了讲解,涉及创建所需的工作目录,准备docker-compose.yml文件以及通过docker-compose工具自动化完成镜像下载和服务启动的一系列命令;同时对可能出现的问题提供了应对策略并附带解决了分词功能出现的问题。 适合人群:从事IT运维工作的技术人员或对NoSQL数据库感兴趣的开发者。 使用场景及目标:该教程旨在帮助读者掌握如何在一个Linux系统中使用现代化的应用交付方式搭建企业级搜索引擎解决方案,特别适用于希望深入了解Elastic Stack生态体系的个人研究与团队项目实践中。 阅读建议:建议按照文中给出的具体步骤进行实验验证,尤其是要注意调整相关参数配置适配自身环境。对于初次接触此话题的朋友来说,应该提前熟悉一下Linux操作系统的基础命令行知识和Docker的相关基础知识

    基于CNN和FNN的进化神经元模型的快速响应尖峰神经网络 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    网络小说的类型创新、情节设计与角色塑造.doc

    网络小说的类型创新、情节设计与角色塑造

    毕业设计-基于springboot+vue开发的学生考勤管理系统【源码+sql+可运行】50311.zip

    毕业设计_基于springboot+vue开发的学生考勤管理系统【源码+sql+可运行】【50311】.zip 全部代码均可运行,亲测可用,尽我所能,为你服务; 1.代码压缩包内容 代码:springboo后端代码+vue前端页面代码 脚本:数据库SQL脚本 效果图:运行结果请看资源详情效果图 2.环境准备: - JDK1.8+ - maven3.6+ - nodejs14+ - mysql5.6+ - redis 3.技术栈 - 后台:springboot+mybatisPlus+Shiro - 前台:vue+iview+Vuex+Axios - 开发工具: idea、navicate 4.功能列表 - 系统设置:用户管理、角色管理、资源管理、系统日志 - 业务管理:班级信息、学生信息、课程信息、考勤记录、假期信息、公告信息 3.运行步骤: 步骤一:修改数据库连接信息(ip、port修改) 步骤二:找到启动类xxxApplication启动 4.若不会,可私信博主!!!

    57页-智慧办公园区智能化设计方案.pdf

    在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。

    一种欠定盲源分离方法及其在模态识别中的应用 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Matlab实现基于BO贝叶斯优化Transformer结合GRU门控循环单元时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了使用 Matlab 实现基于 BO(贝叶斯优化)的 Transformer 结合 GRU 门控循环单元时间序列预测的具体项目案例。文章首先介绍了时间序列预测的重要性及其现有方法存在的限制,随后深入阐述了该项目的目标、挑战与特色。重点描述了项目中采用的技术手段——结合 Transformer 和 GRU 模型的优点,通过贝叶斯优化进行超参数调整。文中给出了模型的具体实现步骤、代码示例以及完整的项目流程。同时强调了数据预处理、特征提取、窗口化分割、超参数搜索等关键技术点,并讨论了系统的设计部署细节、可视化界面制作等内容。 适合人群:具有一定机器学习基础,尤其是熟悉时间序列预测与深度学习的科研工作者或从业者。 使用场景及目标:适用于金融、医疗、能源等多个行业的高精度时间序列预测。该模型可通过捕捉长时间跨度下的复杂模式,提供更为精准的趋势预判,辅助相关机构作出合理的前瞻规划。 其他说明:此项目还涵盖了从数据采集到模型发布的全流程讲解,以及GUI图形用户界面的设计实现,有助于用户友好性提升和技术应用落地。此外,文档包含了详尽的操作指南和丰富的附录资料,包括完整的程序清单、性能评价指标等,便于读者动手实践。

    漫画与青少年教育关系.doc

    漫画与青少年教育关系

Global site tag (gtag.js) - Google Analytics