鸿蒙系统编译方式

鸿蒙系统编译

  • 编译原理
  • 编译方式
    • 概述
    • hb编译
      • ohos-build
      • hb安装
      • 编译使用
    • build脚本
    • hpm
      • hpm介绍
      • 编译
      • 举例说明
  • 综合应用举例
    • 虚拟机中编译
    • docker中使用hpm编译

编译原理

编译构建指导:https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-build-all.md,文档介绍了鸿蒙系统编译原理和基本规则。阅读这部分文档,在开发初期,编译和阅读部分配置代码时能基本明白其意义和作用。

OpenHarmony编译系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:

  • 以部件为最小粒度拼装产品和独立编译。
  • 支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。
  • 支持芯片解决方案厂商的灵活定制和独立编译。

更详细原理介绍,请自行阅读上面链接文档。基础编译工具gn和Ninja相关的非官方资料:
GCC、CMake、CMakelist、Make、Makefile、Ninja啥关系?一图讲透!
鸿蒙源码构建工具Gn 与 Ninja 的介绍及使用入门
GN语言和操作
鸿蒙构建系统——gn官方FAQ翻译,以及gn官方文档分享

gn、Ninja是google发展出来的,看相关的原始文档,需要访问google网站,以上文档应用同仁的总结,帮助理解gn、Ninja,以及理解和make、makefile的区别。gn、Ninja是发展出的一套新的编译工具,如make、makefile、cmake等。

网站 链接
gn项目官网 https://gn.googlesource.com/gn/
Ninja项目 https://gitee.com/mirrors/ninja
Ninja官网 https://ninja-build.org/

编译方式

概述

通读openharmony网站编译相关文档,鸿蒙系统有三种编译方式

命令 实现方式
hb OpenHarmony的命令行工具,用来执行编译命令
build脚本 build.py调用gn、ninja、gcc
hpm 调用任意编译命令,具体有项目编译构建脚本决定,如make、build、hb等。

系统的具体编译方式,具体参照项目提供的文档,有些客制化系统,可能会使用项目自身配置的编译方式。
注意: 在使用以下编译方式时,基于搭建好的编译环境,如docker、虚拟机等,不需要再安装编译工具,直接执行编译命令即可。

hb编译

ohos-build

hb是python包ohos-build中的命令,ohos-build包官网:https://pypi.org/project/ohos-build/
在这里插入图片描述
hb是基于gn和Ninja的编译框架,用于编译鸿蒙系统组件。

hb安装

python3 -m pip install --user ohos-build

文档中出现的python3 -m pip install --user build/hb应该是笔误。除了从官网安装hb命令,有些鸿蒙系统(轻量、小型、标准都是鸿蒙系统)源码中的build/lite目录下包含hb源码,可以使用命令

python3 -m pip install --user build/lite

安装源码目录的hb。如果编译出现错误,或许可以尝试直接使用源码中的hb安装包,通过以上命令安装。hb是鸿蒙系统基本的命令行工具,源码目录位于鸿蒙系统根目录下build/lite/hb,ohos-build也可以下载到hb源码。

hb安装异常处理:https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/quick-start/quickstart-pkg-common-hberr.md

编译使用

常用命令

命令 说明
hb set 选择要编译的产品。hb set -h查看命令选项。
hb build 执行编译,可以使用hb build -h查看详细的编译命令选项,如hb build -f(强制编译)
hb clean 清除已编译结果。全量编译前使用,确保系统会全新编译目标文件。

编译执行步骤

系统类型 文档地址
轻量系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623570.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Comau柯马机器人维修故障分类

在柯马机器人的使用过程中,常见的是Comau机械手减速器故障。那么,我们一起来探讨一下柯马机械臂维修减速机故障的问题。Comau工业机械手减速器故障分类 1. 异响 机器人在工作过程中发出异常声响,可能是柯马机械臂减速器内部磨损或零件松动引起…

阿赵UE引擎C++编程学习笔记——解决中文乱码问题

大家好,我是阿赵。   在UE编写C的时候,可能有些朋友发现,在C里面如果打印输出或者赋值一些中文的字符串的时候,会出现各种的报错,要么乱码,要么直接编译不过。   这个问题,其实和UE本身没什…

嵌入式中STM32上模拟启动Linux自动初始化

Linux中有很多编程思想可以学习,很多大佬把这些思想、机制运用到单片机的编程上。 下文,在STM32上模拟Linux kernel自动初始化流程。 通常我们写程序都是按照这个套路,一个函数一个函数按照顺序逻辑一个一个的执行下去。 如果逻辑非常复杂,涉及的模块比较多,那么这种顺…

Visual Studio使用——vs解决方案显示所有文件

目录 引出vs解决方案显示所有文件Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 总结 引出 Visual Studio使用——自定义代码片段 & 像使用IDEA一样…

LNG船气体监测系统中甲烷传感器的应用

随着全球能源结构的转型和环保意识的增强,液化天然气(LNG)作为清洁、高效的能源,其运输需求日益增长。LNG船作为专门用于运输液化天然气的特种船舶,其安全性和可靠性直接关系到能源供应的稳定性和环境保护的有效性。在…

windows下安装redis

正常生产我们会在Linux下安装redis,windows下安装redis只做依赖环境的快速搭建、项目的快速验证。 1、下载地址 Releases microsoftarchive/redis GitHub 下载 Redis-x64-3.0.504.zip 2、解压文件夹 解压到本地某个文件夹下,比如 D:\redis-3.0.504 3…

Compose容器编排示例

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录如下: 一、从源代码开始构建、部署和管理应用程序 1.1、创建项目目录并准备应用程序的代码及其依赖 1.2、创建Dockerfile 1.3、在…

GD32驱动LCD12864

目录 1、引言 1.1、LCD12864基本概念和作用。 1.2、硬件引脚 2、GD32微控制器简介 3、LCD12864显示屏简介 3.1、模块引脚说明 3.2、模块连接方式 4、驱动原理 4.1、指令集 4.2、显示坐标关系 5、软件开发 6、硬件连接 7、效果演示 8、附录 1、引言 1.1、LCD12…

C语言 | Leetcode C语言题解之第88题合并两个有序数组

题目: 题解: void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nu…

sudo apt-get update失败,怎么解决

本篇文章主要是从我的解决方案出发,因为个体差异性,对大家的帮助可能有限,不过大家也可以作为参考之一。 输入sudo apt-get update,结果一直显示: W: 无法下载 http://mirrors.aliyun.com/ubuntu/dists/jammy-securi…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月14日,星期二

每天一分钟,知晓天下事! 2024年5月14日 星期二 农历四月初七 1、 两部门:2024年全国计划招聘“特岗计划”教师3.7万名。 2、 人社部:2024年“三支一扶”计划拟招募3.44万名高校毕业生。 3、 财政部:5月17日、5月24日…

Nios实验入门——用Verilog编程方式完成LED流水灯显示并使用串口输出“Hello Nios-II”字符到笔记本电脑

文章目录 前言一、Verilog编程方式完成LED流水灯显示1.1 新建工程并添加FPGA芯片1.2 新建.v文件并添加至顶层实体1.3 引脚分配1.4 编译(包含分析与综合)1.5 选择烧录器1.6 添加烧录文件1.7 下载1.8 实验现象 二、Verilog编程方式实现串口2.1 uart_tx.v文件2.2 test.v文件2.3 to…

Linux x86_64 dump_stack()函数基于FP栈回溯

文章目录 前言一、dump_stack函数使用二、dump_stack函数源码解析2.1 show_stack2.2 show_stack_log_lvl2.3 show_trace_log_lvl2.4 dump_trace2.5 print_context_stack 参考资料 前言 Linux x86_64 centos7 Linux:3.10.0 一、dump_stack函数使用 dump_stack函数…

LeetCode 力扣题目:买卖股票的最佳时机 III

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

Autosar架构

蓝框那种叫component,绿框的叫function cluster。 接口 有三种接口,RTE跟SWC之间链接的叫Autosar Interface,RTE跟BSW的Components链接是Standardized Interface,RTE跟BSW的services链接的是Standardized Autosar Interface。 St…

C语言 8 函数递归

目录 1. 递归是什么? 2.递归的限制条件 3. 递归举例1 4. 递归举例2 5.迭代 6. 递归举例3 拓展学习: 1. 递归是什么? 递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的⽅法&#xff0c…

【Spring】Springmvc学习Ⅲ

# Springmvc学习Ⅲ 文章目录 一、图书管理系统1. 功能1.1 登录前端接口前端代码后端接口后端代码 1.2 图书列表展示步骤:图书类代码mock数据代码控制层调用代码服务层代码(存储除数据库中需要存储的数据) 2. 分层控制2.1 三层架构2.2 代码重…

Softing dataFEED OPC Suite通过OPC UA标准加速数字化转型

数字化转型的关键在于成功将信息技术(IT)与运营技术(OT)相融合,例如将商业应用程序和服务器与可编程逻辑控制器(PLC)和设备传感器相融合,为此,各种设备和系统必须能够相互…

【Day1:JAVA导学】

目录 1、path环境变量2、Java背景介绍2.1 Java SE:2.2 Java ME:2.3 Java EE: 3、Java的跨平台性3.1 Java跨平台的原理: 4、Java开发程序的三个步骤5、JDK的组成和配置5.1 JDK的组成: 6、IDEA项目结构介绍7、Java关键字…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决? 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化,订单服务都无需做任何更改&#xff0c…