1 Star 0 Fork 5.1K

youguilin / docs

forked from OpenHarmony / docs 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
编译构建使用指导-1.md 6.14 KB
一键复制 编辑 原始数据 按行查看 历史
mamingshuai 提交于 2021-06-02 01:00 . update OpenHarmony 2.0 Canary

编译构建使用指导

目录结构

/build                           # 编译构建主目录
├── config                       # 编译相关的配置项
├── core
│   └── gn                       # 编译入口BUILD.gn配置
├── loader                       # 各个组件配置加载、模板生成
├── ohos                         # OpenHarmony编译打包流程配置
│   ├── kits                     # kits编译打包模板和处理流程
│   ├── ndk                      # ndk模板和处理流程
│   ├── notice                   # notice模板和处理流程
│   ├── packages                 # 版本打包模板和处理流程
│   ├── sa_profile               # sa模板和处理流程
│   ├── sdk                      # sdk模板和处理流程,包括sdk中包含的模块配置
│   └── testfwk                  # 测试相关的处理
├── scripts                      # 编译相关的python脚本
├── templates                    # c/c++编译模板定义
└── toolchain                    # 编译工具链配置

编译

编译命令

  • 代码根目录下执行全量版本的编译命令:

    ./build.sh --product-name {product_name}

    {product_name}为当前版本支持的平台。比如:Hi3516DV300等。

    编译完成后,结果镜像保存在 out/ohos-arm-release/packages/phone/images/ 目录下。

  • 编译命令支持选项:

      --product-name    # 必须  编译的产品名称,如:Hi3516DV300
      --build-target    # 可选  指定编译目标,可以指定多个
      --gn-args         # 可选  gn参数,支持指定多个
      --ccache          # 可选  编译使用ccache,需要本地安装ccache

开发步骤

  1. 添加组件。

    本节以添加一个自定义的组件为例,描述如何编译组件,编译库、编译可执行文件等。

    示例组件partA由feature1、feature2和feature3组成,feature1的编译目标为一个动态库,feature2的目标为一个可执行程序,feature3的目标为一个etc配置文件。

    示例组件partA的配置需要添加到一个子系统中,本次示例将添加到subsystem_examples子系统中(subsystem_examples子系统定义在test/examples/目录)。

    示例组件partA的完整目录结构如下:

    test/examples/partA
    ├── feature1
    │   ├── BUILD.gn
    │   ├── include
    │   │   └── helloworld1.h
    │   └── src
    │       └── helloworld1.cpp
    ├── feature2
    │   ├── BUILD.gn
    │   ├── include
    │   │   └── helloworld2.h
    │   └── src
    │       └── helloworld2.cpp
    └── feature3
        ├── BUILD.gn
        └── src
            └── config.conf

    示例1:编写动态库gn脚本test/examples/partA/feature1/BUILD.gn,示例如下:

    config("helloworld_lib_config") {
     include_dirs = [ "include" ]
    }
    
    ohos_shared_library("helloworld_lib") {
      sources = [
        "include/helloworld1.h",
        "src/helloworld1.cpp",
      ]
      public_configs = [ ":helloworld_lib_config" ]
      part_name = "partA"
    }

    示例2:编写可执行文件gn脚本test/examples/partA/feature2/BUILD.gn,示例如下:

    ohos_executable("helloworld_bin") {
      sources = [
        "src/helloworld2.cpp"
      ]
      include_dirs = [ "include" ]
      deps = [                                # 依赖组件内模块
        "../feature1:helloworld_lib"
      ]
      external_deps = [ "partB:module1" ]     # (可选)如果有跨组件的依赖,格式为“组件名:模块名”
      install_enable = true                   # 可执行程序缺省不安装,需要安装时需要指定
      part_name = "partA"
    }

    示例3:编写etc模块gn脚本test/examples/partA/feature3/BUILD.gn,示例如下:

    ohos_prebuilt_etc("feature3_etc") {
      source = "src/config.conf"
      relative_install_dir = "init"    #可选,模块安装相对路径,相对于默认安装路径;默认在/system/etc目录
      part_name = "partA"
    }

    示例4:在子系统的ohos.build中添加组件配置:test/examples/ohos.build。每个子系统有一个ohos.build配置文件,在子系统的根目录下。示例如下:

    "partA": {
        "module_list": [
          "//test/examples/partA/feature1:helloworld_lib",
          "//test/examples/partA/feature2:helloworld_bin",
          "//test/examples/partA/feature3:feature3_etc",
        ],
        "inner_kits": [
    
        ],
        "system_kits": [
    
        ],
        "test_list": [
    
        ]
      }

    一个组件包含module_list、inner_kits、system_kits、test_list四个部分的声明,其中:

    • module_list:组件所包含的模块列表;
    • inner_kits:组件提供给其它组件调用的接口,其他组件的模块可以在external_deps中添加依赖的模块;
    • system_kits:组件提供给开发者开发应用的接口;
    • test_list:组件中对应模块的测试用例;
  2. 将组件添加到产品配置中。

    在产品的配置中添加组件,产品对应的配置文件:productdefine/common/products/{product-name}.json。

    在产品配置文件中添加 "subsystem_examples:partA",表示该产品中会编译并打包partA到版本中。

  3. 编译。

    以编译Hi3516DV300为例,编译命令如下:

    ./build.sh --product-name Hi3516DV300 --ccache
  4. 编译输出。

    编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。

1
https://gitee.com/yougl/docs.git
git@gitee.com:yougl/docs.git
yougl
docs
docs
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891