1 / 86

工具链

工具链. 介绍部分 1b. 工具链. 本讲介绍 Symbian OS 的工具链和开发环境 强调的是提供工具的背景和目的 学习使用工具. 构建工具 (Build Tools). 理解 bldmake , bld.inf 和 abld.bat 基本用法 理解项目定义文件( MMP )的目的和典型语法 理解 Symbian OS 资源和文字本地化文件的角色. 构建工具. 为了构建 Symbian OS 程序,需要两个构建文件 : 组件描述文件 ( bld.inf ) 项目定义文件 ( projectname.mmp ). 构建处理.

linus-irwin
Download Presentation

工具链

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 工具链 • 介绍部分 1b

  2. 工具链 • 本讲介绍 • Symbian OS 的工具链和开发环境 • 强调的是提供工具的背景和目的 • 学习使用工具

  3. 构建工具(Build Tools) • 理解bldmake, bld.inf和 abld.bat基本用法 • 理解项目定义文件(MMP)的目的和典型语法 • 理解Symbian OS资源和文字本地化文件的角色

  4. 构建工具 • 为了构建Symbian OS程序,需要两个构建文件: • 组件描述文件 (bld.inf) • 项目定义文件 (projectname.mmp)

  5. 构建处理 • Symbian OS 有自己平台独立的构建文件格式 • 由bld.inf使用 • 以指示一个程序如何被构建 • bldmake工具 • 处理bld.inf组件描述文件 • 它包括关联的项目定义文件 • 产生一个批处理文件 - abld.bat

  6. 构建处理 • bldmake工具能够使用如下选项调用: • bldmake bldfiles 产生 abld.bat和关联的.make文件 • bldmake clean删除所有由bldmake bldfiles 产生的文件 • bldmake inf显示 bld.inf的基本语法 • bldmake plat显示支持的构建平台列表

  7. 构建处理 • 构建平台 • 表示各种目标平台和二进制格式 • 当abld.bat被调用 • 例如 ——用来构建代码 • 特定的平台(模拟器或硬件)由一个参数指定 • 最常使用的构建平台是: • WINSCW创建一个运行在Windows模拟器上的x86格式的二进制文件 • GCCE或ARMV5创建运行在手机硬件上的二进制代码 • - 分别使用GCCE和RVCT编译器构建

  8. 构建处理 • 当指定其中一个平台 • 以 abld.bat命令的一个参数 • 针对该平台的makefile文件将被创建和执行 • bld.inf的语法非常直接 • 它的主要目的就是列出项目定义文件 • 以及构建工具必须在构建之前导出到另一个位置的文件 • 最简单的例子是 • bld.inf只列举了要构建的项目定义文件 • 在关键字PRJ_MMPFILES后指定

  9. bld.inf关键字 • 更加复杂的bld.inf文件 • 可以有很多部分组成 • 使用如下关键字: • PRJ_TESTMMPFILES • 为测试代码指定一个或者多个项目定义文件 • 测试代码可以通过调用abld test build而不是abld build构建

  10. bld.inf关键字 • PRJ_EXPORTS • 列举一系列要从项目目录复制到另一个目录的文件 • 通常是 \epoc32下面的目录 • 可以调用abld export 来初始化导出操作 • 导出工作作为abld build命令的一部分会自动执行 • PRJ_TESTEXPORTS • 列举一系列要从项目目录复制到另一个目录的文件 • 通常是 \epoc32下面的目录 • 可以调用abld test export 来初始化导出操作 • 导出工作作为abld test build命令的一部分会自动执行

  11. bld.inf关键字 • PRJ_PLATFORMS • 可用于列出组件支持的平台 • 如果没有指定 • abld命令使用缺省的集合 • 每个关键字 • 可以以任何顺序指定多次 • 除了这些关键字 • 扩展 makefile文件可用于构建任务 • 它不是有构建产生的makefile文件提供的 • 例如调用特定的工具或转换工具

  12. 构建处理 • 当对bld.inf做了改动 • 例如 –PRJ_EXPORTS下面添加了新的头文件 • bldmake bldfiles必须被重新调用 • 以产生新版本的abld.bat • 以及它所使用的构建用makefile文件 • abld.bat命令 • 能用不同参数从命令行调用 • 最常见的用法如下..

  13. abld.bat命令行参数 • abld build • 组合许多其他参数 • export, makefile, library, resource, target和final • 以构建bld.inf文件中PRJ_MMP-FILES关键字下定义的MMP文件中指定的组件 • abld test build • 构建bld.inf 中PRJ_TESTMMPFILES下指定的组件

  14. abld.bat命令行参数 • abld makefile • 使用Symbian OS makmake工具 • 为bld.inf中指定的每个工程创建makefile文件 .这些makefile文件之后被abld用于执行不同阶段的组件构建 • 每次构建组件,这个命令都会被调用 • makefile 文件总是要重新创建 • 无论对应的MMP文件是否修改

  15. abld.bat命令行参数 • abld freeze • 冻结新的DLL导出函数到.def文件中 • abld clean • 删除由对应的abld命令创建的所有文件 • 编译时产生的所有中间文件 • 由linker产生的所有可执行文件和导入库 • abld reallyclean • 做 abld clean要做的事情 • 还删除由abld export 导出的文件 • 以及由abld makefile或 abld test对应命令产生的makefile文件

  16. abld.bat命令行参数 • 每个命令 • 会针对bld.inf中 PRJ_MMPFILES下指定的所有工程都调用 • 通过使用abld XXX ,其中XXX是命令 • 对于PRJ_TESTMMPFILES 中指定的测试工程 • 则使用abld test XXX

  17. 工程定义文件和MMP 文件语法 • 一个工程定义文件 • 是一个描述构建一个工程所需细节的文本文件 • 通常是指工程的MMP 文件 • 这包括 • 工程的源文件 • 导入库 • 由#include预处理指令指定的被包含文件的位置 • 工程定义文件中的每一行语句都以一个关键字开头...

  18. 工程定义文件和MMP 文件语法 TARGET ASDExample.exe TARGETTYPE exe UID 0 0xF1101100 CAPABILITY NONE SOURCEPATH ..\src SOURCE ASDExampleAppUi.cpp SOURCE ASDExampleDocument.cpp SOURCE ASDExampleApplication.cpp SOURCE ASDExampleView.cpp SYSTEMINCLUDE \epoc32\include USERINCLUDE ..\inc SOURCEPATH ..\data STARTRESOURCE ASDExample.rss TARGETPATH \resource\apps HEADER END STARTRESOURCE ASDExample_reg.rss TARGETPATH \private\10003A3F\apps END // 通用的Symbian OS库 LIBRARY euser.lib efsrv.lib ... // 为清晰起见,忽略其他库文件 • 一个典型MMP文件中的主要关键字描述如下:

  19. 工程定义文件和MMP 文件语法 • TARGET • 指定要构建的文件的名称 - ASDExample.exe • TARGETTYPE • 指要构建名称的类型 • 本例中,是一个可执行应用程序 (EXE) • 最常用的Symbian OS 目标类型是 • DLL • EXE • PLUGIN (ECOM 插件)

  20. 工程定义文件和MMP 文件语法 • 其他支持的TARGETTYPEs 包括 • PDD–物理设备驱动器 • LDD–逻辑设备驱动器 • LIB - 静态库,其二进制代码直接包含在链接它的组件中 • EXEXP - 导出函数的可执行文件 • EPOCEXE和 EXEDLL • 在Symbian OS EKA1 中有时使用 • 在EKA2 中不再需要 • 因为它改进了进程模拟

  21. 工程定义文件和MMP 文件语法 • UID • 指定目标用以标识组件的三个唯一标识符的最后两个 • 目标有三个UIDs • 第一个值(UID1) 不需要给出 • 因为它由构建工具根据TARGETTYPE 自动提供 • 没有两个可执行文件 • 具有相同的UID3 值 • 它们的UID3值都必须从Symbian申请 • Symbian从一个中心数据库中分配

  22. 工程定义文件和MMP 文件语法 • SECUREID • 是本例中没有使用的另一个可选关键字 • 用于定义一个可执行文件的安全标识 (SID) • 用以标识该可执行文件 • SID • 可以通过工程MMP文件中的SECUREID 语句指定 • 如果它没有指定,则用UID3值 • 在没有指定UID3的MMP文件中 • SDI和UID3的值都用KNullUID (=0)

  23. 工程定义文件和MMP 文件语法 • VENDORID • 也是本例中没有使用的可选关键字 • Symbian OS v9.1 中新引入的 • 一个EXE 文件 • 可能包含一个厂商标识(VID) • 由VENDORID关键字指定 • 使用VID 来指明二进制代码的提供商 • 它不是必须使用的

  24. 工程定义文件和MMP 文件语法 • CAPABILITY • Symbian OS v9.1 中的新关键字 • 用于限制特定敏感系统API的使用 • 限制针对调用者,以一定的权限等级 • 为一个可执行文件分配的能力 • 列举在CAPABILITY关键字后 • 如果没有使用CAPABILITY • 赋予二进制代码的缺省能力是CAPABILITY NONE

  25. 工程定义文件和MMP 文件语法 • 可用能力的最大集合 • 可以指定为CAPABILITY ALL • 极少的组件会以这样的权限等级构建 • 一般而言 • 对于具有高权限等级的代码 • 其最大能力集合会是 CAPABILITY ALL -TCB

  26. 工程定义文件和MMP 文件语法 • SOURCEPATH • 指定SOURCE语句中列举的源文件和资源文件的位置 • 可以是相对位置 • 或者是绝对路径 • 该关键字 • 可以多次使用以指定不同的目录 • 也可以完全忽略,如果所有的源文件和MMP文件在同一个目录.

  27. 工程定义文件和MMP 文件语法 • SYSTEMINCLUDE • 指定代码中包含文件的目录 • 其中可以找到用#include<>指定的包含文件 • 所有全局头文件 • 应该存储在\epoc32\include中 • 或者其子目录中

  28. 工程定义文件和MMP 文件语法 • USERINCLUDE • 指定代码中的包含文件所在目录 • 其中可以找到由#include“”指定的包含文件 • 可以使用相对路径 • 或者绝对路径 • 由USERINCLUDE指定的目录 • 只是搜索头文件的三个位置之一 • 其他两个是: • 源文件目录 • SYSTEMINCLUDE目录.

  29. 工程定义文件和MMP 文件语法 • START RESOURCE … END • 指定一个资源文件 • 它包含了文字和用户接口元素的详情 • 这些关键字 • 替代了RESOURCE语句 • 它在Symbian OS v9.1以前的MMP文件中使用 • 一个应用程序可以有许多资源文件 • 每个都由START RESOURCE … END语句块分别指定 • 如果工程具有图形用户界面(GUI) • 至少需要一个资源文件

  30. 工程定义文件和MMP 文件语法 • START RESOURCE • 指示包含程序资源信息的语句块开始 • 资源文件 • 应该与MMP文件在同一个目录 • 或者在其他目录,该目录需要在SOURCEPATH语句中进行声明,并且该声明要直接在资源文件之前 • END • 指示语句块结束

  31. 工程定义文件和MMP 文件语法 • 本例中 • 第二个块指定了ASDExample应用程序的注册资源文件 • 该文件包含 • 应用程序启动器(application launcher)需要的非本地化信息 STARTRESOURCE ASDExample_reg.rss TARGETPATH \private\10003A3F\apps END

  32. 工程定义文件和MMP 文件语法 • 例如 • 应用程序名称 • UID 和属性 • 以及其他启动器需要的信息 • 例如 • 应用程序显示在系统菜单中的标题 • 以及另外独立定义的图标——便于本地化 • 这些定义的位置 • 由注册文件提供

  33. 工程定义文件和MMP 文件语法 • TARGETPATH • 指定编译后的资源(下一节介绍)的位置 • 在本例中 • ASDExample.rss资源被编译 • 在\resource\apps目录中产生输出 • 这是编译后资源文件的标准位置 • 第二个资源 • 注册文件被构建到 \private\10003a3f\apps中 • 它是注册信息的标准位置

  34. 工程定义文件和MMP 文件语法 • 由C++代码编译得到的二进制文件的 • 的构建位置 • 由关键字TARGETPATH指定 • 但是 • 在Symbian OS v9.1的安全平台中 • 所有的可执行代码必须从手机的\sys\bin目录运行 • 所有现在TARGETPATH关键字是多余的 • 除了构建资源文件到适当的位置

  35. 工程定义文件和MMP 文件语法 • HEADER • 是可选关键字 • 是一个资源头文件 (.rsg) 被创建到系统包含文件目录中 (\epoc32\include) • 它允许C++代码使用特定资源的名称 • 在关联的资源文件中定义的 • 本例中 • 产生的头文件 • 用于访问ASDExample.rss中指定的资源 • 注册资源文件不产生资源头文件

  36. 工程定义文件和MMP 文件语法 • LIBRARY • 列举应用程序需要的导入库 • 不需要给出路径 • 每个库声明语句可以包含多个库,它们由空格隔开 • 也可以使用多个LIBRARY声明

  37. 工程定义文件和MMP 文件语法 • EPOCSTACKSIZE • 该关键字用于将栈的大小增加 • 到关键字后面的十进制或者十六进制值 • 该选项应该小心使用 • 给一个应用程序分配额外的栈空间 • 减少其他应用程序的可用空间 • 如果一个应用程序需要大的栈 • 应该对它进行分析,以研究潜在的提高和优化的可能

  38. 工程定义文件和MMP 文件语法 • EPOCHEAPSIZE • 是另一个关键字——本例中没有使用 • 它可用于指定一个进程初始堆的最小和最大尺寸 • 以十进制或十六进制值 • 缺省的最小值是4 KB ,最大值是 1 MB • 最小尺寸 • 指定最初映射给堆使用的RAM • 该进程然后可以根据需要获得更多的对内存,直到达到最大值 • 这些值应该是页面大小(4KB)的整倍数

  39. 工程定义文件和MMP 文件语法 • EXPORTUNFROZEN • 是一个可选关键字 • 由DLL使用,它没有为导出一个完整的.def文件而冻结 • 导入库.lib被创建,并且所有的导出函数 • 包括未冻结的出现在导入库中

  40. 资源文件 • 资源文件 • 典型的用于指定GUI应用程序的用户界面元素 • 例如菜单条和对话框 • 它们也可以用于任何应用程序类型 • 资源文件也可用于定义: • Symbian OS应用程序的行为和功能 • 应用程序启动器所使用的应用程序的属性 • 应用程序使用的其他文字字符串和常量数据 • 例如对话框文字和错误信息

  41. 资源文件 • 为了对一组硬件保持平台独立性 • 资源说明是与每个目标平台的可执行文件分离的 • 资源被指定在 • 直接可读的文本文件中 • 由Symbian OS资源编译器独立编译成单独的二进制文件 • 这种分离 • 减少了应用程序在不同硬件平台移植时所需要的代价

  42. 资源文件 • 资源说明使用的语法 • 提供了对本地化很好的支持 • 通过允许文字和图形资源的分离 • 这不仅便于翻译 • 而且可以创建多语言应用程序 • 而不需要重新编译主程序的代码 • 应用程序的提供(发布)包括单个可执行文件 • 和许多语言特定的二进制资源文件

  43. 资源文件 • 资源文件 • 以Symbian OS特定的语法 写成文本文件 • 然后它们独自被编译 • 用命令行资源构建工具epocrc • 该工具将资源文件传递给C++预处理器 • 然后用Symbina OS资源编译器rcomp编译它 • 或者作为标准构建工具链的部分 • 从命令行或IDE编译

  44. 资源文件 • 资源文件 • 包含许多元素,它们都由一个Symbian OS资源关键字开头 • 例如 • RESOURCE • STRUCT • ENUM • 资源文件的名字具有后缀名.rss • 在.rss文件上调用资源编译器时 • 它产生两个输出...

  45. 资源文件 • 资源编译器产生两个输出 • 二进制资源文件.rsc • 一个位于\epoc32\include的.rsg头文件 • ——如果MMP在START RESOURCE … END块中指定了HEADER关键字 • .rsg文件 • 包含定义在.rss文件中的每个资源的#define声明 • 头文件可以被C++应用程序代码使用 • 以访问二进制资源文件中的元素 • 通过用#include预处理指令将其包含在代码中

  46. 资源文件 • 本地文件是一个文本文件,其命名为 • UIQ平台的后缀名为.rls • S60平台的后缀名为.loc • 直接包含在资源文件中 • 其他的Symbian OS 的头文件类型 • 可以用于资源文件的包括 • .hrh • 可以在C++和资源文件中共享的头文件 • .rh • 仅仅由资源文件使用的头文件

  47. 硬件构建 • 理解ARM C++ EABI是一种为嵌入式应用程序开发优化的工业标准 • 了解RVCT和GCCE编译器的基本信息,它们用于目标硬件构建 • 理解AMV5同时支持32位ARM和16位THUMB指令集,了解速度和大小的区别

  48. EABI 标准 • Symbian OS 运行在本地ARM 处理器上 • 代码必须由支持嵌入式应用程序接口(Embedded Application Binary Interface, EABI)的编译器构建 • 这是一个运行在ARM环境的二进制代码接口标准 • 它使得由不同符合该标准的编译器产生二进制代码进行互操作 • 该标准被设计成 • 具有在内存使用和数据访问时间方面非常高效 • 提供不同厂商的编译器之间的互用性

  49. EABI 标准 • Symbian OS 构建工具定义本地构建目标,它要么调用: • 一个适合版本的GNU 编译器集合 (GCC), 其目标在Symbian OS构建工具中被称为GCCE • 或者ARM’s RealView 编译器工具 RVCT 2.2, 其目标在Symbian OS构建工具中被称为ARMV5 • RVCT 用于 • Symbian 授权使用者如 Nokia 和 Sony Ericsson 以构建它们手机产品的ROM • GCCE 则由绝大多数的Symbian 开发者使用 • 它随着基于Symbian OS v9.1的任何手机产品的SDK一起交付 • 它也可以从Internet上直接下载

  50. GCCE 目标编译器 • GCCE 是开源的GNU C++编译器的一个版本 • 它只用于构建应用程序 • 不能用于编译整个OS • 使用GCCE 可以通过 • 命令行 • 或者从开发IDE环境,如CodeWarrior 或 Carbide.c++中调用 • GCCE 构建目标 • 使用和ARMV5目标一样的.def文件格式 • 构建工具缺省在工程的\EABI目录中查找.def文件

More Related