Symbian的两个工程文件bld.inf 文件和mmp文件

2023-10-29 19:32
文章标签 工程 两个 inf symbian bld mmp

本文主要是介绍Symbian的两个工程文件bld.inf 文件和mmp文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Symbian有两个工程文件:

· 组件描述文件(bld.inf), 这个文件列出了一组相关的工程, 并包含一些编译指令.

· 工程定义文件 (.mmp file),这个文件对要编译的工程进行描述,并定义要构建的资源文件。该文件是环境无关的,编译工具用它来生成针对各种目标环境下的make files文件。

 

组件(component)描述文件: bld.inf

Bld.inf 是一个文本文件。它的内容非常繁琐,主要包括工程定义文件mmp和其他的任何编译工具所需要的文件。该文件分为多个节,其中,mmp文件列表在PRJ_MMPFILES节中。即使一个工程文件只包含一个mmp文件,bld文件仍然是必须的。下面是一个典型的bld.inf文件。

// 目标平台
PRJ_PLATFORMS
WINSCW GCCE
// 从工程中输出的文件
PRJ_EXPORTS
// None
// 工程定义文件
PRJ_MMPFILES
filebrowseapp.mmp
// 工程定义文件(测试代码用)
PRJ_TESTMMPFILES
../test/FileBrowseTest.mmp

 

在上面的例子中, 如PRJ_PLATFORMS 声明所示,默认情况下工程被编译为针对WINSCW平台和 GCC-E平台的执行代码。 当您用CodeWarrior为模拟器编译代码的时候,您使用的是WINSCW 平台, WINSCW的来由是,最终的代码运行于Windows, 单线程模式(in a Single process),并用CodeWarrior编译。

平台的名称用来标识最终的可执行代码所运行的那个平台。 所以, 当上面的代码被编译完后,可执行程序被放在 /epoc32/release/winscw 目录下面(根据是调试(debug)版本还是释放(release)版本,被放在 /udeb 或 /urel 子目录下面)。

如果代码是针对手机硬件的,需要选用GCCE平台。这时,最终的可执行代码被放到/epoc32/release/gcce/目录下面。

 

工程描述文件 (mmp)

mmp 文件中的每个语句都以一个关键字开头。下面是一个典型的mmp 文件的例子。

// filebrowseapp.mmp
TARGET              filebrowseapp.exe
TARGETTYPE          exe
UID                 0x100039CE 0xE80000A6

VENDORID            0
#ifdef __WINSCW__
CAPABILITY          AllFiles  //    
#else
CAPABILITY          NONE      //    
#endif
SOURCEPATH          ../src
SOURCE              FileBrowseAppUi.cpp
SOURCE              FileBrowseDocument.cpp
SOURCE              FileBrowseApplication.cpp
SOURCE              FileBrowseBaseView.cpp
SOURCE              RFsEngine.cpp
SYSTEMINCLUDE       /epoc32/include
USERINCLUDE         ../inc
SOURCEPATH          ../data
START RESOURCE      filebrowseapp.rss
TARGETPATH          /resource/apps
HEADER
END
START RESOURCE      filebrowseapp_reg.rss
TARGETPATH          /private/10003A3F/apps
END
START RESOURCE      filebrowseapp_loc.rss
TARGETPATH          /resource/apps
LANG                SC
HEADER
END
START BITMAP filebrowseapp.mbm
TARGETPATH /resource/apps
HEADER
SOURCEPATH ../gfx
SOURCE C16 folder.bmp
SOURCE C16 file.bmp
SOURCE 8 mask.bmp
END
LIBRARY         euser.lib efsrv.lib cone.lib eikcore.lib eikcoctl.lib eikdlg.lib egul.lib eikctl.lib apparc.lib
LIBRARY bafl.lib
LIBRARY avkon.lib CommonEngine.lib

下面简单地描述每个关键字的作用:

TARGET

该关键字指明了目标文件(exe或dll文件)的名称。

TARGETTYPE

该关键字指明了工程所产生的目标文件的类型,在上面的例子中,我们生成了一个可执行文件。在大多数情况下,目标文件的类型为dll,exe或是其他的插件(plugin)。

UID

目标(通常指可以执行的.exe或.dll文件)具有三个UID,这些UID用来标识组件,第一个UID是无须指定的。因为它是编译工具根据目标的类型自动分配的。所以这里所指定的实际上是UID2,这个值进一步指明了目标的类型,上面例子中,值(0x100039CE)指明了目标文件是一个应用程序,Symbian系统使用这个值来标识所有的应用程序。下一个指定的UID 对每个应用程序来说都是唯一的,系统用它来标识应用程序的注册资源文件和该程序的安装包文件(.pkg)。所以为了保证这个值的唯一性, 您必须要向Symbian申请这个UID,由他们负责从数据库中为您的应用程序分配一个UID。可到Symbian的网站上了解更多的相关信息。有一些UID的值是用来测试的,例如SDK中的例子:文件系统浏览应用程序(filesystem browser)所使用的UID为0xE80000A6, 您也可以在测试您的应用程序的时候使用这个值,但注意,不要在您的最终产品中使用它。

SECUREID

这是个可选的关键了,在上面的例子中没有出现。该关键字为应用程序定义了安全标示符,用来指明这个程序可以访问哪个私有的目录。如果该关键字没有使用,用UID3来代替该关键字。

VENDORID

该关键字是在Symbian OS v9.1版本新增的。用来指定软件提供商的ID号。该关键字不是必须的,可省略。

CAPABILITY

这是 Symbian OS 9.1新增加的关键字。 该关键字指明了应用程序的权限(或称作能力, 如:查看系统目录)。大上面的例子中,应用程序在模拟器上和在手机上被分配了不同的能力(capability)。在模器上,该程序被赋予了AllFiles 的权限, 比在手机上运行时,能看到更多的私有文件系统的区域。没有被赋予AllFiles 能力的程序不能看到/Sym 目录下的内容。 应用程序只有在经过认证(certificate)以后才能获得AllFiles的能力。关于认证和签名的内容,我们在这一章的后面会讲到。

SOURCEPATH和SOURCE

SOURCE关键字指明了有哪些源文件和资源文件需要编译, 而SOURCEPATH关键字指明了这些文件的位置。这个位置既可以是相对路径(相对于mmp文件),也可以是绝对路径。

SYSTEMINCLUDE

这个关键字指定了系统头文件的位置,系统头文件通常用#include<>语句包含。

USERINCLUDE

该关键字的作用类似于SYSTEMINCLUDE,它指明了在用户自定义头文件所在的位置。

START RESOURCE…END

START RESOURCE 关键字表明了一个信息块的开始,这些信息指明了如何编译资源文件。END 标示该信息块结束。

TARGETPATH

该关键字用来指定被编译后的资源文件的位置。注意: 由于安全方面的考虑,所有的可执行代码(exe或dll)都从手机上的/sys/bin/ 目录运行。可执行代码不需要用该关键字指定位置。TARGETPATH 关键字仅仅用来指定编译后的资源文件的位置。

HEADER

这是一个可选的关键字, 当它被使用的时候,系统将会在/epoc32/include/路径下创建资源头文件(.rsg)。这个头文件包含了允许以C++代码引用特定资源的标识符。

LIBRARY

这个关键字列出了应用程序需要链接的库文件。

STATICLIBRARY

该关键字用来指定需要被静态链接的库文件 (库文件中的代码会被链接到您的程序中,而不是需要时才装载到内存)。

START BITMAP…END

这一节包含了应用程序图标所使用的位图(bitmap),以及如何将这些位图编译成.mbm(Symbian系统专有的图像格式)的方式。

EPOCSTACKSIZE

该关键字是可选的,我们上面的例子中并未用到。在以前的Symbian OS 版本中,缺省的栈大小为0X5000字节。在v9.1版本中,缺省值为0x2000。为了增加栈的大小,可以使用该关键字。例如:EPOCSTACKSIZE 0x5000 。要注意的是, 对栈设置仅仅对真实设备有效,但对模拟器无效。

EPOCHEAPSIZE

该关键字也是可选的,我们上面的例子中并未用到。这个关键字指定了应用程序可以使用的最大、最小堆空间。缺省情况下,4K为最小的尺寸,1M为最大的尺寸。


下面重点来介绍一下START BITMAP…END

首先需要有两个bmp文件,如list_icon.bmp 和 list_icon_mask.bmp(可选). 这两个文件由画图工具生成。

关于mask.bmp的介绍:

mask是遮罩的意思.在透明底的gif ,png等图形上经常含有mask层.电影特效中也有这个东西.
我这样举个例子:比如你看见一张有透明区域的gif图,那么,从本质上说,这gif文件中含有两个图片混合层("不透明的完整图片层"+"mask"层.两个层的尺寸大小是一样的).当电脑对图片进行显示时,会对比这个mask层的相应部分来显示"不透明的完整图片层",假设mask层的某个区域是黑的.那么在显"不透明的完整图片层",的时候就把区域内颜色去掉.产生了透明.

 

然后再 mmp文件中使用这两个bmp文件定义mbm文件: 为了填写SOURCE c*, 请注意查看bmp是多少位的bmp

 

START BITMAP Scp.mbm
HEADER
TARGETPATH  /resource/apps
SOURCEPATH  ../gfx
SOURCE c12,1 list_icon.bmp list_icon_mask.bmp
END

 

START BITMAP ScpMe.mbm
 HEADER
 TARGETPATH /resource/apps
 SOURCEPATH ../gfx
 SOURCE c24 contacts_lovely.bmp settings_machinecat.bmp
END

 

然后在.uidesign中选择合适的mbm, bmp文件作为某个控件的图标。

 

最后还需要修改pkg文件, 如增加:

"../../epoc32/data/z/resource/apps/ScpMe.mbm" -"!:/resource/apps/ScpMe.mbm"

 

关于START BITMAP…END的用法,还可以参照以下的介绍:

This short tutorial will explain how a Symbian application can access and display bitmaps. There is several ways to do it but we will only deal with the simplest one:
  create some standard BMP files
  construct a MBM file. MBM stands for Multi-BitMaps and is Symbian specific file format to hold bitmaps. A single MBM file can contain several bitmaps with different resolution and/or color-depth.
  open it in the application

The MBM file is constructed as a part of the compilation process. So you have do declare an entry for it in the application’s MMP file. The syntax for this is:
start bitmap target-file
[targetpath target-path ]
[header ]
[sourcepath source-path ]
source color-depth source-bitmap-list
end

target-file is the name of the file to generate with its MBM extension (e.g. sprites.mbm).

The targetpath primitive is optional. If it is specified, target-path is the location where the MBM file will be stored. If it is not specified, the application directory will be used.

If the header keyword is supplied, a .mbg header file will be generated in directory epoc32/include (e.g. sprites.mbg). This is sometimes useful since it automatically creates token IDs to adress each invidual bitmaps within the MBM.

sourcepath indicates the location of your original BMP files.

The source statement is used to specify the list of BMP files to write into the MBM. All the bitmaps within the statement shall have the same color-depth . The format for his specifier is [c]bit-depth where bit-depth is the number of bits per pixel and c indicates a color bitmap.

If you want to include files with different color-depth in a single MBM, you have to add several source statement. If you want to include files located in several directories in a single MBM, you need to add several sourcepath... source statements.

Example:


start bitmap sprites.mbm
header
sourcepath ../bitmaps
source c8 ship.bmp bullet.bmp alien1.bmp alien2.bmp
end

If you need to create several MBM files, you need to use a start bitmap ... end declaration for each of your file.

这篇关于Symbian的两个工程文件bld.inf 文件和mmp文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302880

相关文章

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

二、Maven工程的创建--JavaSEJavaEE

1、idea创建Maven JavaSE工程:  2、idea创建Maven JavaEE工程:   (1)手动创建 (2)插件方式创建 在idea里安装插件JBLJavaToWeb; 选择需要生成的项目文件后,右击: 项目的webapp文件夹出现小蓝点,代表成功。

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho

三、Maven工程的构建

首先,创建和构建是两个概念。 构建是指将源代码、依赖库和资源文件等转换为可执行或可部署的应用程序的过程。 在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。 同时,项目构建还能将多人写的代码聚合,并能够自动化项目的构建和部署,

创建一个大的DIV,里面的包含两个DIV是可以自由移动

创建一个大的DIV,里面的包含两个DIV是可以自由移动 <body>         <div style="position: relative; background:#DDF8CF;line-height: 50px"> <div style="text-align: center; width: 100%;padding-top: 0px;"><h3>定&nbsp;位&nbsp;

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo