构建的必要性
- 前端开发有构建工具:
Grunt、Gulp、Webpack - 后台开发有构建工具:
Maven、Ant、Gradle
构建工具重要性不言而喻,它描述了整个工程的如何编译、连接,打包等规则,其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后输出我们想要的文件。
鸿蒙轻内核(L1/liteos)的编译构建工具是hb,hb是ohos-build的简称, 而ohos又是openharmony os的简称.
hb | ohos-build
hb通过以下命令安装,是用 python写的一个构建工具.
python3 -m pip install --user ohos-build
其源码在 ./build/lite 目录下,含义如下:
build/lite
├── components # 组件描述文件
├── figures # readme中的图片
├── hb # hb pip安装包源码
│ ├── build # hb build 命令实现
│ ├── clean # hb clean 命令实现
│ ├── common # 通用类, 提供 Device,Config,Product,utils 类
│ ├── cts # hb cts 命令实现
│ ├── deps # hb deps 命令实现
│ ├── env # hb env 命令实现
│ ├── set # hb set 命令实现
├── make_rootfs # 文件系统镜像制作脚本
├── config # 编译配置项
│ ├── component # 组件相关的模板定义
│ ├── kernel # 内核相关的编译配置
│ └── subsystem # 子系统编译配置
├── platform # ld脚本
├── testfwk # 测试编译框架
└── toolchain # 编译工具链配置,包括:编译器路径、编译选项、链接选项等
构建组成
鸿蒙构建系统由 python, gn, ninja, makefile几个部分组成,每个部分都有自己的使命,干自己最擅长的活.
- python : 胶水语言,最擅长的是对参数,环境变量,文件操作,它任务是做好编译前的准备工作和为gn收集命令参数.不用python直接用gn行不行? 也行,但很麻烦.比如:直接使用下面的命令行也可以生成 .ninja文件,最后的效果是一样的.但相比只使用
hb build哪个更香,hb build也会生成下面这一坨坨, 但怎么来是python的强项.
/home/tools/gn gen /home/openharmony/code-v1.1.1-LTS/out/hispark_aries/ipcamera_hispark_aries \
--root=/home/openharmony/code-v1.1.1-LTS \
--dotfile=/home/openharmony/code-v1.1.1-LTS/build/lite/.gn \
--script-executable=python3 \
'--args=ohos_build_type="debug" ohos_build_compiler_specified="clang" ohos_build_compiler_dir="/home/tools/llvm" product_path="/home/openharmony/code-v1.1.1-LTS/vendor/hisilicon/hispark_aries" device_path="/home/openharmony/code-v1.1.1-LTS/device/hisilicon/hispark_aries/sdk_liteos" ohos_kernel_type="liteos_a" enable_ohos_appexecfwk_feature_ability = false ohos_full_compile=true'
图为绕过hb python部分直接执行gn gen 的结果:

- gn : 类似构建界的高级语言,gn和ninja的关系有点像C和汇编语言的关系,与它对标的是cmake,它的作用是生成.ninja文件,不用gn直接用ninja行不行? 也行,但更麻烦.就跟全用汇编写鸿蒙系统一样,理论上可行,可谁会这么去干呢.
- ninja:类似构建界的汇编语言,与它对标的是make,由它完成对编译器cl

最低0.47元/天 解锁文章
784

被折叠的 条评论
为什么被折叠?



