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

来源:互联网 发布:ubuntu 安装unity 编辑:程序博客网 时间:2024/05/18 00:46

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.

原创粉丝点击