当前位置:首页 >> 信息与通信 >>

Build


Build环境使用手册 环境使用手册

Version: 0.2. 1

2010-4-22

www.spreadtrum.com

Spreadtrum Confidential and Proprietary

Build环境使用手册

修订历史

/>版本
0.0.1 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11

日期
2007-12-11 2008-1-31 2009-03-10 2009-03-31 2009-04-09 2009-04-15 2009-04-20 2009-04-28 2009-05-06 2009-05-30 2009-07-08

作者
Daniel.Luo Daniel.Luo Mingjianliu Mingjianliu Mingjianliu Mingjianliu Mingjianliu Mingjianliu Mingjianliu Mingjianliu Mingjianliu

审核
Create 增加客户发布及使用内容

说明

基于MOCOR_W09.11修改 增加多线程编译,Windows command 编译 删除Cygwin 相关所有信息 编译命令增加5.18 特别提醒,新建工程部分增加 NV,Resource 部分的说明 根据评审结果修改 增加编译暂停说明;资源编译说明更新,增加编译出错的一 个说明 增加对VC模拟器编译说明,提醒修改工程 Resource,NV 说明更新 增加通过复制方式创建新工程说明;增加 source Insight 与 CC集成说明;增加全局变量和转义宏的实现区分;增加第 三方编译选项说明;更新多套资源编译说明 1.第三方逻辑部分独立成一个文件Makefile.thirdpartyMakefile.third-party 2 编译APP 需要调用 tools\DEBUG_TOOL\BMP2Array 工具3. 增加分布式编译说 明.4.鼠标右键增加命令行快捷方式说明5. DOS下输入命令 时用Tab键进行命令自动填充 6.增加动态生成模拟器部分说明

0.12

2009-08-19

Mingjianliu

0.13

2009-08-31

Mingjianliu

更新 3.2 统一编译部分关于:makefile宏赋制值的特别说 明 更新复制方式创建项目编译脚本 部分:大工程中增加 PRODUCT_BASELIB_DIR变量 及使用说明; MS_Customize/source/product/config 驱动部分根据工程 名字自适应 ;7.2.4 项目修改编译选项注意事项更新;更 7.2.4 项目修改编译选项注意事项更新; 新NV编译选项说明;3.5编译命令最大长度 8K限制 编译命令最大长度 限制 Windows 模拟器 调整 提醒:Xoreax IncrediBuild 有Bug,代码路径中不要有括 号,即使是单个括号也不可以,否则无法编译. 多个资源.xls 合并使用问题 1. 7.2.2 复制方式创建项目编译脚本中对非开放的.a ,对应 目录只取 PRODUCT_BASELIB_DIR 的值; 只 2. 6.6 分布式编译增加依赖关系,并增加编译细节说明; 3. 6.8对 Feature Options 的使用增加了一个错误用法说明

0.14
0.15 0.16 0.17

2009-09-24
2009-10-10 2009-10-21 2009-12-30

Mingjianliu
Mingjianliu Mingjianliu Mingjianliu

0.18

2010-02-02

Mingjianliu

0.19 0.20

2010-02-12 2010-02-25

Mingjianliu Mingjianliu

根据2月11日评审修改 公共转义宏使用标准make语法生成,不再通过读源文件方 式生成;删除6.8

修改3.2 主编译方式关于转义宏部分。

0.21

2010-04-22

Mingjianliu

Makefile 文件中 变量 filter-out_macro 记录了不需要转义成编译宏的一些 makefile变量,其中一些是编译时的命 令行参数。如果项目增加了额外的命令 行参数,请考虑是否在转义宏时将其过 滤掉 (如果是客户版本,检测SPRD宏 时有可能不通过).。

V1.0.0

Spreadtrum Confidential and Proprietary

2 of 26

Build环境使用手册

重要声明
版权声明
本文档中的任何内容受《中华人民共和国著作权法》的保护,版权所有 ? 2006, 展讯通信有限公司,保留所有权利,但 展讯通信有限公司, 版权所有 注明引用其他方的内容除外。

商标声明
本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有,但注明属于其他公司拥有的商标除外。在提及其他公 司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。

不作保证声明
展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间 接、特殊或连带的损失承担任何责任。

保密声明
本文档(包括任何附件)包含的信息是保密信息。接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目 的,也不得将本文档泄露给任何第三方。

V1.0.0

Spreadtrum Confidential and Proprietary

3 of 26

Build环境使用手册


1 2



说明 ..................................................................................................................................... 6 运行环境 .............................................................................................................................. 7 2.1 编译环境及安装相关软件 .............................................................................................. 7

3 4

编译方式 .............................................................................................................................. 8 目录结构及主要脚本 .......................................................................................................... 10 4.1 Build环境目录结构 ...................................................................................................... 10 4.2 重要脚本 ..................................................................................................................... 11 4.2.1 Makefile.rules ...................................................................................................... 11 4.2.2 Makefile.modules ................................................................................................. 11 4.2.3 Makefile.third-party .............................................................................................. 11 4.2.4 Makefile.verify ...................................................................................................... 11 4.2.5 Makefile ............................................................................................................... 11

5

基本命令 ............................................................................................................................ 12 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 帮助 ............................................................................................................................ 12 编译参数中 projectname 与项目编译脚本对应关系 ..................................................... 12 编译整个项目[update] ................................................................................................. 12 重新编译整个项目[new]............................................................................................... 13 清除所有编译结果[cleanall] ......................................................................................... 13 清除模块编译结果 ....................................................................................................... 13 编译模块 ..................................................................................................................... 13 生成可执行文件........................................................................................................... 13 编译FDL/bootloader .................................................................................................... 13 编译NV ....................................................................................................................... 14 编译MMI Resource 文件 ............................................................................................. 14 编译PC模拟器工程 ...................................................................................................... 14

6

其它命令 ............................................................................................................................ 17 6.1 6.2 6.3 6.4 6.5 6.6 6.7 编译Logel工具............................................................................................................. 17 pclint 扫描 ................................................................................................................... 17 编译完成net send提醒功能.......................................................................................... 17 编译命令的简写........................................................................................................... 17 多线程编译.................................................................................................................. 17 分布式编译.................................................................................................................. 17 编译出错暂停 .............................................................................................................. 18

7

模块修改及项目定制 .......................................................................................................... 19

V1.0.0

Spreadtrum Confidential and Proprietary

4 of 26

Build环境使用手册

7.1 模块修改 ..................................................................................................................... 19 7.1.1 模块目录结构调整 ................................................................................................ 19 7.1.2 添加或删除文件.................................................................................................... 19 7.1.3 修改编译选项 ....................................................................................................... 19 7.1.4 新增模块 .............................................................................................................. 20 7.2 项目定制 ..................................................................................................................... 20 7.2.1 创建全新的项目编译脚本 ..................................................................................... 20 7.2.2 复制方式创建项目编译脚本 .................................................................................. 20 7.2.3 添加或删除模块.................................................................................................... 20 7.2.4 修改项目编译选项 ................................................................................................ 21 7.2.5 客户发布及使用.................................................................................................... 21 8 9 第三方编译选项说明 .......................................................................................................... 22 相关使用技巧 ..................................................................................................................... 23 9.1 9.2 9.3 9.4 9.5 9.6 查看log文件 ................................................................................................................ 23 makefile 编译过程中报错: No rule to make target ` XXX ', needed by `yyy'. .............. 23 Makefile 中全局变量和转义宏的区分 ........................................................................... 23 Source Insight和ClearCase配置 ................................................................................. 23 鼠标右键命令行快捷方式设置 ..................................................................................... 26 DOS下输入命令时用Tab键进行命令自动填充 ............................................................. 26

V1.0.0

Spreadtrum Confidential and Proprietary

5 of 26

Build环境使用手册

1 说明
Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具, Build环 境可以完成项目全部代码的编译和二进制文件的生成,同时在此环境中可以通过脚本执行的方式产生其他软件以及 开发工具,如 fdl, bootloader, nv_parameter,resource等。 Build环境的相关命令脚本需要在Windows Command环境下进行,因为每个项目工程编译出来的中间依赖文 件都独立存放,所以可以通过开启多个Windows Command窗口对多个不同的项目进行同时编译。

V1.0.0

Spreadtrum Confidential and Proprietary

6 of 26

Build环境使用手册

2 运行环境
2.1 编译环境及安装相关软件 编译环境及安装相关软件 环境及 操作系统:建议 Windows 2000 professional 或 windows XP SP3 版本
编译工具:ADS V1.2 (ARM Developer Suite) patch848 is fully ready RVDS V2.2(Realview Devloper Suite) is under evaluation Microsoft Visual C++ 6.0 SP6 ADS patch版本的查看方法见下图:

其他工具:Microsoft Excel 2000 或者 Microsoft Excel 2003 或者 WPS 2005及以上版本

V1.0.0

Spreadtrum Confidential and Proprietary

7 of 26

Build环境使用手册

3 编译方式 编译方式
项目的所有模块和工具目前采用两种方式编译。 1.独立的软件和工具编译方式 .独立的软件和工具编译方式 软件和工具编译 目前采用独立的makefile编译的软件或者工具模块有: fdl1 fdl2 bootloader nv_parameter resource logel simulator pclint 这些模块或功能对应的 make/module_name/module_name.mk 本身已经是一个完整的makefile文件, make工具可以直接执行。目前实现方式是在项目的工程文件中,将这些模块的列表对INDEPENDENT 赋值, 指示这些模块需要单独编译。采用独立编译的软件模块一般不参与项目主工程的链接。 # independent compile INDEPENDENT= fdl1 fdl2 bootloader nor_fdl logel simulator resource 编译方式为 :make PROJECT=projectname MODULES=bootloader 注意: 独立编译的模块,通过这种方式调用只能执行默认的最终目标。

2.主编译方式 . 绝大部分的模块都是通过这种编译方式来完成编译的。这种编译方式使用一致的依赖关系生成方法,统一 控制编译的行为。对应的 make/module_name/module_name.mk 文件并不是一个完整的makefile 文件,一般其中 只包含编译需要的宏列表,文件列表,搜索文件路径 即可,其他都由框架自动完成。 每个项目工程在编译的时候,会自动将Feature Options 部分转义成真正的代码中使用的宏传给相应的子模 块,在对子模块代码编译的时候,自动附加上这些宏。转义的规则如下: 对功能开关型的 Feature Options ,当Feature Options 为TRUE 时转义,为FALSE时不转义 export NANDBOOT_SUPPORT = TRUE ### Boot From Nandflash Support: # Option1:TRUE # Option2:FALSE 上面的定义会产生转义宏 -DNANDBOOT_SUPPORT传递给各个子模块 2对功能枚举型的 Feature Options ,将 Feature Options 的名字和值拼接起来转义成一个宏,同时对 非空的值,同时转义一个Feature Options 名字的宏。 export SUBLCD_SIZE = 96X64 ### Resolution Of Main LCD # Option1:NONE # Option2:96X64 #define SUBLCD_SIZE_NONE #define SUBLCD_SIZE_96X64

上面的定义会产生转义宏-DSUBLCD_SIZE_96X64和-DSUBLCD_SIZE传递给各个子模块 转义的宏临时文件存放在如下变量中 C_MACRO A_MACRO
V1.0.0

( for C language) (for Assebly language)
Spreadtrum Confidential and Proprietary 8 of 26

Build环境使用手册

Makefile 文件中 变量 filter-out_macro 记录了不需要转义成编译宏的一些makefile变量,其中一些是编译时的 命令行参数。如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉 (如果是客户版本,检测 SPRD宏时有可能不通过).。

3. 编译的依赖关系 在主编译方式中,系统会自动生成依赖关系文件,这些依赖关系文件存放在 MS_Code\build\projectname_builddir\dep 下。 注意: makefile中的配置文件 Makefile.rules 没有作为依赖,若其内容改变,需全新编译工程. 对编译后生成的 .a 文件及其相应的依赖文件,这些文件默认都有固定的存放位置,没有特别需求,请 不要改变,否则有可能造成编译依赖错误,导致出现问题.

4.编译命令最大长度 8Kbytes限制 . 限制 Windows 环境最大只支持8Kbytes长度的命令,所以需要控制宏的数量以搜索目录的数量或改进编译方 法,防止命令行超长而无法编译.

V1.0.0

Spreadtrum Confidential and Proprietary

9 of 26

Build环境使用手册

4 目录结构及主要脚本 目录结构及主要脚本 主要
4.1 Build环境目录结构 环境目录结构 环境
└─MS_Code ├─build 编译结果的输出总目录 │ ├─8801h_s3b_builddir 和具体项目名称对应,自动生成的输出目录 │ │ ├─dep 编译依赖文件存放目录 编译最终结果存放目录,包括arm bin,fdl,bootloader, │ │ ├─img │ │ │ resource,nv等 │ │ ├─lib 客户编译模块.a存放目录 │ │ ├─log 编译log文件目录,包括编译出错信息、告警信息等 │ │ ├─fdl_bootloader 编译生成的fdl bootloader文件目录 │ │ ├─res 编译生成的resource文件目录 │ │ ├─pclint 编译生成的pclint文件目录 │ │ ├─tmp 编译生成的临时文件目录 │ │ └─obj 模块目标文件存放目录 │ │ └─win 自动生成模拟器工程存放目录 │ └─sc6600l_sp6601l_builddir ├─chip_drv ├─MS_Ref ├─PS ├─atc ├─common │ ├─nv_parameters 统一NV project存放目录 │ └─source 目标统一main.c存放目录 ├─make 依据编译选项文件,makefile将自动搜寻该目录并循环| 对模块进行编译 │ └─aac │ └─aac.mk 对应模块的编译脚本 | … | ├─MS_Customize │ ├─config │ ├─custom │ └─product 区分不同产品驱动配置文件 ├─version 目标统一版本version.c ├─MS_MMI ├─Third-party │ └─bt_csr │ ├─include │ └─lib ├─lib ├─fdl_bootloader 第三方软件库文件和头文件存放位置

展讯开放库文件目录存放地和build目录分开 fdl bootloader 存放目录

Build环境的关键目录如上图所示,所有相关代码和脚本都统一集中在MS_Code目录下,下面将对特殊的目录 做些详细的说明: 1) build目录 bulild目录及其下的相关内容在程序编译过程中自动生成,对于特定的项目,build目录会生成 projectname_builddir目录,并在该目录下自动生成dep、img、lib、log、nv、tmp及obj等目录。
V1.0.0 Spreadtrum Confidential and Proprietary 10 of 26

Build环境使用手册

2) make目录 make目录存放和模块对应的编译脚本,子目录和模块呈一一对应关系,各个子目录中存放着和目录名称对应 的脚本文件。一旦有了新添的模块源文件或删减,相关脚本需要进行修改。同样,如果有了新增的模块,则 需要在make目录下建立新的模块子目录。相关过程在后面会有更详尽的描述。

3) MS_Customize目录 和项目相关的scatter file文件存放在MS_Customize目录中,需要注意该文件名称需要和项目名称保持一致。

4) version目录 version目录中存放项目相关的version.c文件,目前需要注意该文件名称需要和项目名称保持一致。

4.2

重要脚本

在MS_Code目录下存放有Makefile.rules、Makefile.modules、Makefile以及项目的相关make脚本,即项目 编译脚本,比如project_8801h_s3b.mk等等,同时在make目录的各个子目录下存放有各个模块的make脚本,即模 块编译脚本,比如aac.mk、app.mk等等。一般情况下开发人员仅维护项目编译脚本即可, Makefile.rules、 Makefile.modules和Makefile不需要修改。 针对模块和项目的变化,开发人员需要修改模块编译脚本和增加新的项目编译脚本。下面将针对 Makefile.rules、Makefile.modules和Makefile进行简单的说明,关于模块编译脚本和项目编译脚本将在后面的章节 中详细描述。

4.2.1

Makefile.rules

Makefile.rules中定义了绝大部分平台无关、模块无关以及项目无关的公共变量,其中包括编译器的指定、公 共编译参数CFLAGS、AFLAGS的定义、文件复制、删除、目录创建等系统命令、公共头文件路径、SPRD库路径 以及第三方库文件路径等变量的定义。 请根据您的机器上的软件情况进行相应修改。

4.2.2

Makefile.modules

Makefile.modules定义了make/bulid系统中的目标依赖关系,一般开发中不需要维护该文件,这里需要指出 的是:目前有部分模块采用了armcc编译器(比如:mpeg4_codec),对于这部分模块需要在Makefile.modules 中申明,具体操作可以参考该文件中已经被申明的相关模块部分。

4.2.3

Makefile.third-party
Makefile.third-party 将第三方逻辑独立成一个文件,便于维护,这个文件会 被 include 到各工程.mk 中.

4.2.4

Makefile.verify
Makefile.verify 对makefile中的宏的父子关系进行校验,防止出错.

4.2.5

Makefile

Makefile是最上层的总控脚本,该脚本直接处理用户的命令,并执行相关的处理,在没有特殊需要的情况 下用户不需要维护该文件。 .

V1.0.0

Spreadtrum Confidential and Proprietary

11 of 26

Build环境使用手册

5 基本命令
Build的所有操作命令都要在Windows Command 下执行,并且需要在关键脚本的当前路径,即MS_Code目录下完 成输入。示例如下:

您也可以直接执行MS_Code\cmd.exe 即可一次进入这个目录。

5.1

帮助

通过命令行工具在项目目录MS_Code下输入命令make help可以获得相关的帮助信息,这些相关信息内容可 以从下面对于小节中获取更详细的内容,这里不再重复。

5.2

与项目编译脚本对应关系 编译参数中 projectname 与项目编译脚本对应关系

在编译项目时,会使用类似make PROJECT=projectname 命令,这里projectname必须和项目编译脚本 项目编译脚本的 项目编译脚本 名称保持一定的对应关系,否则系统会报: Project defined Makefile project_projectname.mk is not exist! ! 这样的错误。如项目编译脚本文件名为 project_8801h_s3b.mk,则projectname的内容为8801h_s3b,因此我们可 以执行如下的命令来实现编译 make PROJECT= 8801h_s3b

5.3

编译整个项目 编译整个项目[update]

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname 或 make PROJECT=projectname update 命令,makefile根据已有的依赖关系编译因修改涉及到的相关的模块并在没有错

V1.0.0

Spreadtrum Confidential and Proprietary

12 of 26

Build环境使用手册

误出现的情况下完成最终的链接,若不存在依赖关系,makefile 会在编译文件时自动生成依赖关系。因为只编译较 少的模块文件,可以节省编译时间。这个命令也会将 fdl,bootloader,NV 同时编译出来。

5.4

重新编译整个项目[new] 重新编译整个项目

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname new,该命令将清除编译过 程中生成的全部目标码和库文件,然后对projectname所指定的项目进行整体编译并在没有错误出现的情况下完成 最终的链接,编译过程中会自动生成依赖关系。会这一命令适合在项目进行了较大修改:比如公共头文件数据结构 发生变化、公共接口参数发生变化、文件更新中时间戳混乱或makefile相关脚本被修改等等情况下建议使用这一命 令,确保重新对项目进行完全编译得到正确的输出结果。这个命令也会将 fdl,bootloader,NV ,Resource同时编译 出来。 该命令相当于运行如下3个命令 make PROJECT=projectname cleanall make PROJECT=projectname MODULES=resource make PROJECT=projectname update

5.5

清除所有编译结果[cleanall] 清除所有编译结果

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname cleanall,该命令将清除编 译过程中生成的全部目标码和库文件。

5.6

清除模块编译结果

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=”module1 module2 …” clean,该命令将清除指定模块的编译输出结果,其中包含指定模块的目标文件和库文件。该命令适合 在指定模块内部出现重大修改或者模块本身makefile脚本被修改,在进行模块编译前使用。

5.7

编译模块

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=”module1 module2 …” update,该命令将对指定模块进行编译,但不会编译完成后进行自动链接。该命令属于模块开发人员 最常用的命令,在具体模块开发中需要经常使用该命令来验证模块的编译完整性。

5.8

生成可执行文件

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname image可以进行链接生成相 关的可执行文件,该命令可以在模块修改并编译完成后进行,也适合第三方库文件更新后进行。

5.9

编译FDL/bootloader 编译

通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=bootloader 对 bootloader编译 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=fdl1 对fdl1进 行编译。 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=fdl2 对fdl2进 行编译。 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=nor_fdl nor_fdl 进行编译。 输出结果位置: build/projectname_builddir/fdl_bootloader.同时会自动将最终的bin文件copy 到 build/projectname_builddir/img 下,方便下载到手机中。
V1.0.0 Spreadtrum Confidential and Proprietary 13 of 26



Build环境使用手册

您也可以根据工程具体情况用一条命令编译出所有目标,示例如下: make PROJECT="rocky_6901" MODULES="fdl1 fdl2 bootloader" make PROJECT="rocky_3201" MODULES="nor_fdl"

5.10 编译 编译NV
通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES= nv_parameter 对nv_parameter编译 输出结果位置: build/projectname_builddir/nvm。同时会自动将最终的bin文件复制 到 build/projectname_builddir/img。 注意:

1. make/nv_parameter/nv_parameter.mk 是NV的makefile文件 make/nv_parameter/config_info.nv 为NV 的配置文件 2.如果希望单独修改项目某项NV参数,例如希望修改nv_type.nvm某项,应该在使用make指令 编译出NV项目文件之后使用NVEDITOR工具编译保存。

5.11 编译 编译MMI Resource 文件
通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES= resource 对 Resource编译。MMI resource使用的资源原始文件路径通过如下编译宏来定义 export MMI_RES_DIR = mmi_res_240x320 # resource directory # Option1:mmi_res_240x320 # Option2:mmi_res_240x400 输出结果位置: build/projectname_builddir/res。同时会自动将最终的映像文件复制到 build/projectname_builddir/img目录。 默认情况下编译Resource 使用了 主工程中的Feature Options 转义宏和 app.mk 模块中的宏,如果您的项 目资源编译需要使用其他的模块的宏,请修改resource.mk文件。

注意: 1) 当前不能正确支持多个项目工程的资源并行编译 2) 编译资源文件需要工具脚本支持,如果环境不完整会导致编译过程停止 3) make\make_cmd\merge.vbs 工具使用说明: 语法:merge.vbs str1.xls str2.xls 功能: 将 str2.xls 合并到 str1.xls, 说明:如果str2.xls中字符串ID与str1.xls中的ID相同,脚本会列出所有相同的ID,返回1,合并失 败退出;如果没有重复ID,则返回0,合并成功。 这样做合并的好处是可以将不同来源的两个资源文件独立开来,不需要手工合成一个文件再编译。如果 使用该功能,请自行修改resource.mk 。

5.12 编译 模拟器工程 编译PC模拟器工程 模拟器
编译Win32模拟器工程的步骤

1) 通过makefile 动态生成模拟器工程dsw文件; 生成模拟器工程时一些配置信息(skin,resource,sim)文件 MSSimCfg.ini, SIMTest.ini会自动生成 并存放到win\bin文件夹下;模拟器 msdev工具 也会从MS_MMI 里 Copy 一份到这个文件夹中。 使用类似如下的命令可在该工程的build 临时文件夹 的win 下生成对应的所有.dsp ,dsw 文件 make PROJECT=sc6600l_sp6601l MODULES=simulator
V1.0.0 Spreadtrum Confidential and Proprietary 14 of 26

Build环境使用手册

2) 编译模拟器; 用VC6 打开 win/simulator.dsw 文件,设置 msdevkernel 为 Active Project, 编译完成后 msdevkernel.dll 会生成到win/bin 目录下 3) 运行模拟器; 双击win/bin 目录下 的 msdev.exe即可。

功能说明: 通过对 MOCOR 平台 makefile 大工程文件分析,取得要编译的文件列表,宏,搜索路径等信息后自动生 成对应的 VC dsp 工程文件和一个 simulator.dsw 的工作空间文件,执行simulator.dsw 就可以编译出 模拟器使用的.dll文件. 文件说明: simulator.mk (make/simulator/simulator.mk) 指示模拟器需要使用的模块列表,特别指定的编译宏列表,及完成生成模拟器的所有工作 simulator.ini (make/simulator/simulator.ini) 配置文件,用来指示 模拟器工程与make工程在 文件,宏,搜索路径的差异。其中msdevkernel 为总dsp 文件,模拟器工程需要的所有lib文件如第三方.lib文件等都要加到这个工程中。 该文件支持代码宏,示例如下: #ifdef PLATFORM_SC6600L chip_drv += chip_drv/source/c/ivsp_drv_6600l.c #endif simulator.ini 说明: [ADD_INC_PATH] 用来指示除makefile对应工程的搜索路径外,dsp工程中还需要增加的搜索路径 [DEL_INC_PATH] 用来指示在makefile对应工程的搜索路径中需要删除的搜索路径 [ADD_OPTION] 用来指示除makefile对应工程的搜索路径外,dsp工程中还需要增加的编译宏 注意:宏列表需要用""来引起来,如 app = "USB_WEBCAMERA_SUPPORT USB_LOG" [DEL_OPTION] 用来指示在makefile对应工程的编译宏中需要删除的宏 注意:宏列表需要用""来引起来,如 rtos="_RTOS WIN32 _DEBUG _MBCS _LIB _RTOS _ENABLE_LOG_TOOL" [ADD_FILE] 用来指示除makefile对应工程的文件外,dsp工程中还需要增加的文件 [DEL_FILE] 用来指示在makefile对应工程的文件中需要删除的文件,如果具体某个模块的值为 * 则表示这个模块的 所有文件都删除 [REPLACE_FILE] 用来指示在makefile对应工程的文件中路径的替换 使用技巧: 部分软件模块实现方式在模拟器和目标硬件环境不一致,可以参考如下样例修改兼容两种平台的编译: 1.平台目标硬件端JPG为硬解码,模拟器上怎么办?: simulator.mk 中 对 macro_set 赋值 ifeq ($(strip $(JPG_DEC_SUPPORT)), JPG_HW) macro_set += JPG_DEC_SUPPORT=JPG_SW endif
V1.0.0 Spreadtrum Confidential and Proprietary 15 of 26

Build环境使用手册

ifeq ($(strip $(JPG_ENC_SUPPORT)), JPG_HW) macro_set += JPG_ENC_SUPPORT=JPG_SW endif simulator.ini 修改如下: [DEL_OPTION] global = "" #if defined(JPG_DEC_SUPPORT_JPG_HW) global += "JPG_DEC_SUPPORT_JPG_HW" #endif #if defined(JPG_ENC_SUPPORT_JPG_HW) global += "JPG_ENC_SUPPORT_JPG_HW" #endif [ADD_OPTION] global = "WIN32 _DEBUG _MBCS _LIB THREADX_OS _RTOS" #if defined(JPG_DEC_SUPPORT_JPG_HW) global += "JPG_DEC_SUPPORT_JPG_SW" #endif #if defined(JPG_ENC_SUPPORT_JPG_HW) global += "JPG_ENC_SUPPORT_JPG_SW" #endif 2.目标硬件板上已完成的功能但模拟器上还没有调好,怎么先禁掉该功能? simulator.mk 中 对 macro_set 赋值 ifeq ($(strip $(CMMB_SUPPORT)), TRUE) macro_set += CMMB_SUPPORT=FALSE endif simulator.ini 修改如下 [DEL_OPTION] global = "" #if defined(CMMB_SUPPORT) global += "CMMB_SUPPORT" #endif

V1.0.0

Spreadtrum Confidential and Proprietary

16 of 26

Build环境使用手册

6 其它命令

6.1

编译Logel工具 工具 编译

通过命令行工具在项目目录MS_Code下输入命令make PROJECT="rocky_3201" MODULES="logel" clean update 对logel工具进行编译。注意,编译这个工具需要 perl 5.8 。 注意:SPRD 客户无法使用该命令

6.2

pclint 扫描

通过命令行工具在项目目录MS_Code下输入命令make PROJECT="rocky_3201" pclint 对全部模块代码进 行pclint 扫描。输入make PROJECT="rocky_3201" MODULES=”app gui ps” pclint 对指定的模块代码进行pclint 扫描。

6.3

编译完成net send提醒功能 编译完成 提醒功能
通过命令行工具在项目目录MS_Code下输入命令 make PROJECT="rocky_3201" ip=192.168.0.1 make PROJECT="rocky_3201" ip=pcname 当代码编译完成时,会自动向指定的IP地址或机器名 发一个 net send 消息,说明该工程编译是否成功。 注意,这个命令只在生成 image 后才调用,单独编译某个模块并不 生成 image 时并不会调用。

6.4

编译命令的简写
make PROJECT=rocky_3201 MODULES=”app gui ps” 可以简写为 make p=rocky_3201 m=”app gui ps”

make PROJECT=rocky_3201 new 可以简写为 make p=rocky_3201 new

6.5

多线程编译

Build环境支持多线程编译,可以充分利用多核CPU 的优势,加快编译速度,必须通过显式的方式指定 开启线程数: make p=rocky_3201 new job=<开启线程数> 其中 <开启线程数> 表示编译时同时启动线程个数,建议不要超过CPU 核心数。

6.6

分布式编译

Build环境支持 Xoreax IncrediBuild 分布式编译,可以充分利用网络优势,加快编译速度.只需要在 正常的编译指令后增加ib=1 即可: ib= ib make p=8801_s3b new ib=1 ib= 分布式编译支持依赖关系,所以当您执行make p=rocky_3201 m=app update ib=1 时,会重新编译所
V1.0.0 Spreadtrum Confidential and Proprietary 17 of 26

Build环境使用手册

有app模块文件.另外如果您的代码中的文件位置有变动时,编译时请将涉及的模块先使用clean命令清理中间 依赖文件,然后再编译,否则有可能出现找不到相关文件而无法编译的问题。 跟Xoreax IncrediBuild工具有关,此命令可能工作不正常。

6.7

编译出错暂停

默认情况下,编译出错后将继续编译,并不听停下来。如果您需要makefile 支持编译出错暂停功能, 请使用stop参数编译,并赋值为1。命令示例如下: make p=rocky_3201 stop=1 new 遇到异常时脚本会调用DOS下的Pause命令,用户敲任意键会继续编译,如果需要强行推出需要敲 Control+C. 目前停止的方式是调用DOS的 Pause,按任意键会继续编译,如果需要强行推出,需要按 Control+C.

V1.0.0

Spreadtrum Confidential and Proprietary

18 of 26

Build环境使用手册

7 模块修改及项目定制 模块修改及项目定制 修改及项目
这里涉及到前面谈到的关键脚本的修改,在大多数情况下开发人员针对模块或者项目的需要只需修改和补充 两类的关键脚本:模块编译脚本 项目编译脚本 模块编译脚本和项目编译脚本 模块编译脚本 项目编译脚本。

7.1

模块修改

在此,我们把出现在Build环境中的最小编译单位称为模块,Build系统中将以MS_Code/make目录下的各个子目录 名称作为约定的模块名称,这些子目录和各自的功能模块之间呈一一对应的关系。

7.1.1

模块目录结构调整

如果模块内部存储目录结构或者模块整体相对目录发生改变,则需要修改模块相应的模块编译脚本 模块编译脚本并修改 模块编译脚本 变量MSRCPATH,这里以模块aac为例: 在make/aac.mk中定义了: MSRCPATH = MS_Ref/codec/aac/src MS_Ref/codec/aac/src/decoder

这里MSRCPATH用来定义该模块源文件的搜索路径,如果该模块中源文件的路径发生了变化,就需要重 新定义MSRCPATH,确保模块编译需要的文件都包含在了搜索路径中。 如果涉及到头文件路径出现变化则需要重新定义变量MINCPATH,以确保模块使用到的头文件完全被包含 在了头文件定义路径之中。以aac.mk为例,其MINCPATH变量定义如下: MINCPATH = MS_Include/chip_drv MS_Ref/codec/aac/inc MS_Ref/codec/aac/src/decoder \ MS_Ref/codec/aac/src/aac_plus_inc

注:这里MSRCPATH和MINCPATH的相对路径都是以MS_Code作为上级目录而言的,所以需要按照这一约定给 出源文件或头文件完整的相对路径。

7.1.2

添加或删除文件

如果模块编译文件有添加或删除的需要,则需要修改变量SOURCES,可以将增加的文件直接添加在原有 的定义之后,如果是需要删除,则可以直接从定义中拿掉。以aac.mk为例,其SOURCES定义如下: SOURCES = aac_adp.c aac_lc_decoder.c bits.c cfft_tab.c common.c \ decoder.c filtbank.c huffman.c id3_parse.c \ is.c mp4.c mp4atom.c mp4ff.c mp4sample.c mp4util.c ms.c pns.c pulse.c \ specrec.c syntax.c tns.c internal_var.c 这里需要强调转意符\的用法 在这里表示续行 的用法, 在这里表示续行, 后不能有空格出现 在最后一个文件后( 后不能有空格出现, 这里需要强调转意符 的用法,\在这里表示续行,在\后不能有空格出现,在最后一个文件后(这里为 internal_var.c)不应该再出现该符号。 )不应该再出现该符号。

7.1.3

修改编译选项

有时为了适应不同平台或者产品的需求,模块编译选项会发生变化,这时需要修改变量MCFLAG_OPT, 通过不同的编译选择来满足需要,以aac.mk为例,其MCFLAG_OPT定义如下: MCFLAG_OPT = -Otime -zc -D_AACARM_

这里的-Otime –zc属于该模块需要的编译器特殊选项,关于编译其他选项在前面的Makefile.rule中有描 述,请参考Makefile.rule中CFLAGS的定义。这里宏“_AACARM_”则属于模块自身的特殊选项。针对不同项目 的需要MCFLAG_OPT可以在这里进行相应的修改。 注意:对于“_AACARM_”这类模块内部定义的编译选项,需要在前面加上“-D”以示为编译选项。

V1.0.0

Spreadtrum Confidential and Proprietary

19 of 26

Build环境使用手册

7.1.4

新增模块

一旦有了新的功能模块需要添加到Build系统中,需要在MS_Code/make目录下同时建立对应该模块的子目 录,同时需要在该目录下完成和目录名称一致并以“.mk”为后缀结尾的模块编译脚本 模块编译脚本,该脚本的主要目标就是需 模块编译脚本 完成:MCFLAG_OPT、MINCPATH、MSRCPATH以及SOURCES(模块中有需要编译汇编文件的情况下还有 MASMFLAG_OPT)的定义,编写方法同前面的5.1.1—5.1.3小节。

7.2
7.2.1

项目定制
创建全新的项目编译脚本

1.在MS_Code目录下创建一个新的项目编译脚本 项目编译脚本,该脚本的命名规则必须是前缀“project_”+“项目名 项目编译脚本 称”+文件后缀“.mk”的形式,比如项目名称为abcd,则相应的项目编译脚本 项目编译脚本名称必须是project_abcd.mk。 项目编译脚本 2.在\MS_Code\MS_Customize\source\product\config目录下创建以 projectname 为名的文件夹,并初始化 好所有的项目定制文件并注意修改 make\custom_drv\custom_drv.mk 3.修改project_ projectname.mk 中的 PRODUCT_CONFIG 变量值 指定为 “projectname”,如 abcd 4.在\MS_Code\MS_Customize下创建编译其需要的scatter file文件 5.在\MS_Code\Version目录 下创建相应的项目版本文件(version.c) 6. 修改 \MS_Code\make\resource\resource.mk指定资源路径 7.修改 \MS_Code\make\nv_parameter\nv_parameter.mk 指定NV配置文件

7.2.2

复制方式创建项目编译脚本

为了加快创建工程文件的过程,您可以基于一个已有的一个工程文件,复制后改一个名字基本就可以 编译通过了,在这个基础上配置您想要的工程配置。 当您通过复制方式创建一个新工程时,请考虑以下几项信息: 1. 请确认新工程中 PRODUCT_CONFIG 指定的目录是否需要修改,是否需要创建一个新的驱动文件集; 2. 请确认新工程中 PRODUCT_BASELIB_DIR 指定的非开放模块.a目录名是否需要修改; 3. 请确认新工程的nv是否需要修改,检查nv_parameter.mk 文件是否满足您的需要; 4. 请确认新工程的Resource是否需要修改,检查resource.mk 文件是否满足您的需要; 5. 请确认是否为新工程创建一个新的scatter file文件

7.2.3

添加或删除模块
如果需要从项目中去除不需要的模块,可以修改变量EXPORTLIBS或者COMPLIBS_DBG,比如:

EXPORTLIBS = \ aac bsd dc aac_lc !atc audioservice chip_drv dsp_codec admcm adpcm amr \ char_lib \ generic_tone \

bt_pal_csr digitalgain

custom_tone dtmf_tone img isp

custom_drv dv eq_exp

layer1 midi pcm scp ucom

layer1_dsp mpeg4_codec ps record !sim

img_proc mmk gui

l4 \ mp3 nvm \

main \

refbase sfs

rtos

scm ubot

scaling

transsamplerate

!tcpip \

upcc

voice

version

xsr_port !nvparameter !fdl1 !fdl2 !bootloader

COMPLIBS_DBG = app 某个模块应该放在EXPORTLIBS中进行定义或放在COMPLIBS_DBG进行定义,取决于该模块对客户的提 供方式。其中在EXPORTLIBS中申明的模块表明这些模块将采用库文件的方式提供给客户,而COMPLIBS_DBG
V1.0.0 Spreadtrum Confidential and Proprietary 20 of 26

Build环境使用手册

的模块则表明会提供全部的源代码供客户进行开发。对于客户自己新增加的模块,则只能在COMPLIBS_DBG变量 中申明。 对于nvparameter、fdl1、fdl2、bootloader等是一些辅助的文件,只编译出来即可,不需要参与连接,则 只需要在对应模块前紧加上“!”符号即变成 !nvparameter !fdl1 !fdl2 !bootloader 就可以将这些模块排除在项目的 连接之外。如果需要在项目中增加新的模块,则只需要在将该模块名称列举到这个序列中,用空格和其他模块分隔 开即可。 注意:“\”符号后面应该紧接换行符而不能跟有空格,这个序列中的最后一个模块不能再带有“\”符号,

7.2.4

修改项目编译选项

修改项目功能开关相关的编译选项时请注意: 1. 只有主Makefile中的 “Feature Option(User Customized)”区域的宏开关,可以自行开关 2. 任何非原则1中的宏开关(包括子makefile, 代码中),用户均不可自行修改。如要更改,必须通知展 讯CPM,由展讯修改宏并重新编译版本发给客户。

不同的项目可以按项目需要对上述变量进行相关修改。与此同时,不同的项目或平台需要选择不同的第三 方库文件参与链接,所以有必要修改变量3RD_LIBS,比如: 3RD_LIBS = Third-party/WAP2.0_YR/ARM_LIB/CmsBrowser.a Third-party/Wintone/RecoCore.o \ Third-party/WAP2.0_YR/ARM_LIB/CmsCommon.a Third-party/cstar/lib/csk2.a \ Third-party/WAP2.0_YR/ARM_LIB/CmsMMS.a Third-party/cstar/lib/csk2full.a \ Third-party/WAP2.0_YR/ARM_LIB/libcrypto.a

7.2.5

客户发布及使用 客户发布及使用 发布及

为了兼顾展讯内部开发以及客户开发使用,make/bulid环境中在项目编译脚本 项目编译脚本中通过一个特殊的变量 项目编译脚本 SPRD_CUSTOMER 来进行区分,如果是展讯内部开发使用需要定义: SPRD_CUSTOMER = FALSE

对于展讯客户需要定义: SPRD_CUSTOMER = TRUE

这样客户可以不依赖某些模块源文件而完成编译链接。另外如前面指出的,对于客户自己新增模块,则需要 在COMPLIBS_DBG变量中进行申明。

V1.0.0

Spreadtrum Confidential and Proprietary

21 of 26

Build环境使用手册

8 第三方编译选项说明
第三方软件提供商,请使用如下的编译选项来编译代码以配合Spreadtrum MOCOR 平台。 SC6600R 平台: noSTACKCHECK 版本: CFLAGS AFLAGS = -cpu ARM7TDMI -O2 -bi -g+ -apcs /interwork/ -fy -Ec -Wall = -cpu ARM7TDMI -keep -bi -g -apcs /shlclient/interwork/

STACKCHECK 版本: CFLAGS AFLAGS = -cpu ARM7TDMI -O1 -bi -g+ -apcs /interwork/swst -fy -Ec -Wall = -cpu ARM7TDMI -keep -bi -g -apcs /shlclient/interwork/swst

SC6600L 平台 noSTACKCHECK 版本: CFLAGS AFLAGS = -cpu ARM7TDMI -O2 -bi -g+ -apcs /interwork/ -fy -Ec -Wall = -cpu ARM7TDMI -keep -bi -g -apcs /shlclient/interwork/

STACKCHECK 版本: CFLAGS AFLAGS = -cpu ARM7TDMI -O1 -bi -g+ -apcs /interwork/swst -fy -Ec -Wall = -cpu ARM7TDMI -keep -bi -g -apcs /shlclient/interwork/swst

SC8801H 平台 noSTACKCHECK 版本: CFLAGS AFLAGS = -cpu ARM926EJ-S -O2 -bi -g+ -apcs /interwork/ -fy -Ec -Wall = -cpu ARM926EJ-S -keep -bi -g -apcs /shlclient/interwork/

STACKCHECK 版本: CFLAGS AFLAGS = -cpu ARM926EJ-S -O1 -bi -g+ -apcs /interwork/swst -fy -Ec -Wall = -cpu ARM926EJ-S -keep -bi -g -apcs /shlclient/interwork/swst

V1.0.0

Spreadtrum Confidential and Proprietary

22 of 26

Build环境使用手册

9 相关使用技巧
9.1 查看log文件 文件 查看
Build相关的屏幕输出同时也被重新定向输出到了各个模块的编译log文件中,一旦系统报告链接错误: Could not open file build/rocky_dvb_builddir/lib/module_n.a,则表明模块module_n没有能够正确编译完 成,可以查看该模块的相关log,并查询“ error”或者“rule”相关的内容,查明出错的原因。

9.2

makefile 编译过程中报错: No rule to make target ` XXX ', needed by `yyy'. 编译过程中报错:
例如 make[1]: *** No rule to make target `guianim.o', needed by `gui.a'. 这个错误说明: 当编译gui.a 的时候,无法生成 guianim.o 原因是没有搜索到生成 guianim.o 所使用的源文件,这个文件可能是guianim.c , guianim.cpp, guianim.s 等。 根源有可能为: .mk 中宏使用不对 源文件不存在 makefile中源文件的搜索路径 MSRCPATH不完整导致make找不到这个源文件.

9.3

Makefile 中全局变量和转义宏的区分
默认主工程文件中类似如下的定义(变量定义紧跟###),makefile 会把他们转义成具体的宏参与所有模块的 编译 export NANDBOOT_SUPPORT = TRUE ### Boot From Nandflash Support:

有时候我们只是想定义一个变量,并把这个变量的值传递到子模块中,并不想转义成具体的宏参与编译,这 时候您可以按照下面的方式实现就可以了。区别是注释的 # 少于三个就可以。 export PRODUCT_CONFIG = rocky_3201 # MS_Customize/source/product/config;

9.4

Source Insight和ClearCase配置 和 配置 配置过程: 配置过程:
1、选择Source Insight的菜单Option中的Custom Commands; 2、在弹出的对话框中的Command列表中选择Check Out(或者点击Add自己起一个好记的名字)

V1.0.0

Spreadtrum Confidential and Proprietary

23 of 26

Build环境使用手册

3、在Run命令行中添加如下命令(其他的命令请见后面说明): "C:\Rational\ClearCase\bin\cleartool" checkout -nc %f 其中,"C:\Rational\ClearCase\bin\cleartool"可能是需要修改的(如果你使用的不是ClearCase 的默认安装路径的话,就请改为自己指定的路径吧) 4、将Output多选框中的Capture Output和Control多选框中的Pause When Done都选中,这样才 能看到命令执行的结果。 5、将命令加入菜单项,点击Menu,在Menu下拉框中选择Work等(随便选就是了,至于添入那 个菜单项中就看个人喜好了)进行添加,通过选择Custom Cmd:Check Out,并单击Insert按钮 添加:

V1.0.0

Spreadtrum Confidential and Proprietary

24 of 26

Build环境使用手册

Checkout操作: 操作: 操作
在Source Insight中打开视图上的源文件,单击work菜单下的Check Out,对该文件进行 checkout,会弹出checkout的操作:

其中:

Comments for the file’s checkedout operation是checkout时需要添加的注释信息,输入完
成后回车,然后再输入一个点.,再次回车,完成输入。 在Run命令行中添加的各种命令的具体写法如下: CheckIn: "C:\Rational\ClearCase\bin\cleardlg" /checkin %f CheckOut: "C:\Rational\ClearCase\bin\cleartool" checkout -nc %f Undo CheckOut: "C:\Rational\ClearCase\bin\cleartool" uncheckout -rm %f Version Tree:(使用这个命令时Capture Output和Pause When Done都可以不用选的) "C:\Rational\ClearCase\bin\cleartool" lsvtree -graphical -all %f Find: (查找当前目录及子目录下自己分支修改的文件) "C:\Rational\ClearCase\bin\cleartool" find %d -element brtype(your_branch_name) print Update File "C:\Rational\ClearCase\bin\cleartool" update %f Update View "C:\Rational\ClearCase\bin\cleartool" update –g compare preversion: "C:\Rational\ClearCase\bin\cleartool" diff -g -pre %f
V1.0.0 Spreadtrum Confidential and Proprietary 25 of 26

Build环境使用手册

9.5

鼠标右键命令行快捷方式设置 鼠标右键命令行快捷方式设置
将下面的文本存成CommandPrompt.reg 文件,然后双击导入到注册表即可 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Folder\shell\CommandPrompt] @="Command Prompt" [HKEY_CLASSES_ROOT\Folder\shell\CommandPrompt\Command] @="CMD /k cd %1"

9.6

DOS下输入命令时用 下输入命令时用Tab键进行命令自动填充 下输入命令时用 键进行命令自动填充
将下面的文本存成 DOSTAB.reg 文件,然后双击导入到注册表即可 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor] "CompletionChar"=dword:00000009

V1.0.0

Spreadtrum Confidential and Proprietary

26 of 26


相关文章:
build.prop文件对照讲解
build.prop文件对照讲解_计算机软件及应用_IT/计算机_专业资料。build.prop文件对照讲解 本文以 CM 的 build 为例讲解如何修改这些参数 # begin build properties (...
CCS新建工程build option设置
CCS新建工程build option设置_计算机软件及应用_IT/计算机_专业资料。CCS新建工程的build option设置CCS3.3 建立新工程参考文件 SPRU301 — TMS320C6000 Code Compose...
build.prop修改手机信息
build.prop修改手机信息_IT/计算机_专业资料。本文以 CM 的 build 为例讲解如何修改这些参数 # begin build properties (开始设置系统性能) # autogenerated by ...
Android Build类获取手机硬件信息
Android Build类获取手机硬件信息_计算机软件及应用_IT/计算机_专业资料。AndroidAndroid Build 类获取手机硬件信息 1. Build.BOARD // 主板 2. Build.BRAND // ...
buildbot安装与使用
3.2 需要安装哪些插件安装 buildbot,需要安装多个插件,需要哪些插件在 buildbot 官方文档可以找到,有些官方文档没提 到,但也是必须的。 需要的插件有:Twisted,py...
rpmbuild简单步骤
rpmbuild简单步骤_计算机软件及应用_IT/计算机_专业资料。rpmbuild进行打包自己工程的步骤。1.yum install rpm-build 2.cp rpmbuild 文件夹到/root 下 3.文件夹...
浅析项目管理(Design-Build)模式
浅析项目管理(Design-Build)模式 摘要:本文浅析了项目管理中 Design-Build(以下简称 DB 模式)的内涵、 特点及优缺点, 阐明了影响 DB 模式承包造价的各种因素并对...
教你怎么修改build.prop文件
教你怎么修改build.prop文件_计算机软件及应用_IT/计算机_专业资料。转载,感谢原作者,很详细,很有用的教你怎么修改 build.prop 文件,优化自己的 rom,很简单的, ...
CTB (Clear to Build)
CTB (Clear to Build)_生产/经营管理_经管营销_专业资料。Clear to Build CTB (Clear to Build) What is "Clear to Build" (CTB)?Q:I found a job ...
build.xml详解
build 目录中--> <property name="build.dir" value="build" /> <property name="build.classes" value="${build.dir}/classes"/> <property name="build...
更多相关标签:
building | build up | build过去式 | build的过去式 | build 2016 | build.prop | build your dream | build.xml |