鸿蒙系统编译方式

news2024/11/27 14:41:53

鸿蒙系统编译

  • 编译原理
  • 编译方式
    • 概述
    • 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 清除已编译结果。全量编译前使用,确保系统会全新编译目标文件。

编译执行步骤

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js前端获取农历日期

对于公历来说,直接 new 一个 Date 就能获取到,而对于农历来讲可就很难了,因为农历需要有许多复杂计算,虽然一般用的甚少,但对于某些场景来说还是会需要的,那么怎样获取农历日期呢? 这里推荐一个…

2024初会押题来了!经济法和实务,内部资料,赶快做一做!

初级会计考试考前冲刺策略 1. 核心知识点掌握 考前冲刺首先需要对核心知识点进行梳理和重点复习。《初级会计实务》和《经济法基础》是考试的两个主要科目,考生需要确保对其中的高频考点有深刻的理解。 2. 高效记忆技巧 对于容易遗忘的知识点,可以采用…

C++进阶:AVL树详解及模拟实现(图示讲解旋转过程)

C进阶:AVL树详解及模拟实现(图示讲解旋转过程) 之前在搜索二叉树最后早就埋下伏笔,来介绍AVL树和红黑树,今天就先来第一个吧 文章目录 1.AVL树介绍1.1概念介绍1.2核心性质 2.项目文件规划3.整体框架(节点和…

管仲发动的粮食战争令人惊醒

各种类型的战争,在中国春秋战国时代就已经包罗万象、炉火纯青了,第一仲父管仲无疑是其中最伟大的军事家之一。 时至今日,他留给人们的最大印象,应该是孔子那句话“微管仲,吾其被发左衽矣。” 也就是说,如果…

2024生日快乐祝福HTNL源码修复版

源码介绍 2024生日快乐祝福HTNL源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面, 源码截图 源码下载 2024生日快乐祝福HTNL源码

证明力引导算法forceatlas2为什么不是启发式算法

一、基本概念 吸引力 F a ( n i ) ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j \displaystyle \bm{F}_a(n_i) \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} Fa​(ni​)nj​∈Nctd​(ni​)∑​ωi,j​dE​(ni​,nj​…

大型医疗挂号微服务“马上好医”医疗项目(4)设计一个医院方接口

如何构建一个医院方接口 一、如何进行数据库建模 数据库建模一般需要使用工具PowerDesign,但是其实在navicat中是有类似的功能的 二、分析医院接口会有什么字段 其实很多的同学在入行的时候会有一个问题,没有设计思维。 表字段的设计方案 状态字段…

[蓝桥杯]真题讲解:数三角(枚举+STL)

[蓝桥杯]真题讲解&#xff1a;数三角&#xff08;枚举STL&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;数三角&#xff08;枚举STL&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #define int long…

LeetCode_栈和队列相关OJ题目

✨✨所属专栏&#xff1a;LeetCode刷题专栏✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 上一篇&#xff1a;数据结构_栈和队列(Stack & Queue)-CSDN博客 有效的括号 解析: 这里我们用数组实现的栈来解决这个问题&#xff0c;在有了栈的几个基础接口之后&#xff0c;我们运用这…

【Esp32S3 | Arduino】在Arduino中使用C++的高级特性

文章目录 前言一、Arduino中的Vector示例代码二、Arduino中的Map示例代码前言 最近在玩Arduino,自上次发现Arduino可以用Template,能使用高级宏后,这次发现Arduino竟可以使用C++中的一些STL容器,这属实令人震惊。起因是我打算做一个动态的数组,但是手动实现一些操作属实麻烦…

如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库

前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库&#xff0c;希望大家能觉得实用&#xff01; 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496…

‘vue-cli-service‘ is not recognized as an internal or external command解决方案

vue-cli-service is not recognized as an internal or external command, operable program or batch file.解决方案 先进行 &#xff1a; npm install -g vue/cli 命令安装vue cli 是必须的。 如果 npm run build 还是报错 遇到同样的提示&#xff1a; 这时候先安装依赖 np…

树莓派|采集视频并实时显示画面

1、使用SSH远程连接到树莓派 2、新建存放代码的目录 mkdir /home/pi/my_code_directory 3、进入存放代码的目录 cd /home/pi/my_code_directory 4、新建py文件 nano cv2test.py 5、输入代码 import cv2# 打开摄像头 cap cv2.VideoCapture(0)while True:# 读取视频帧ret…

产品推荐 | 基于Intel (Altera) Cyclone V打造的水星Mercury SA1核心板

01 产品概述 水星Mercury SA1片上系统&#xff08;SoC&#xff09;核心板通过结合基于ARM处理器的SoC FPGA、快速DDR3L SDRAM、eMMC flash、QSPI flash、Gigabit Ethernet PHY和RTC形成了一个高性能嵌入式处理方案&#xff0c;结合了CPU系统的灵活性和FPGA原始的、实时的并行处…

软件测试总体报告(实际项目原件Word参考)

软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c…

信创应用软件之邮箱

信创应用软件之邮箱 文章目录 信创应用软件之邮箱采用信创邮箱的必要性信创邮箱采购需求国产邮箱业务形态国产邮箱代表性品牌CoremailRichmail安宁eyouUMail拓波 邮件安全的发展阶段 采用信创邮箱的必要性 邮箱是天然的数据存储空间&#xff0c;党政和央国企客户在使用过程中存…

如何在 Python 中使变量不可继承

1. 问题背景 在 Python 中&#xff0c;子类可以继承父类的属性和方法。但是&#xff0c;有时我们希望子类不能继承父类的某些属性或方法。这种情况下&#xff0c;该如何做呢&#xff1f; 2. 解决方案 解决方案一&#xff1a;使用双下划线前缀 Python 中的双下划线前缀用于表…

【软考网络工程师】每日练题学知识

1.在EIGRP协议中&#xff0c;某个路由器收到了两条路径到达目标网络&#xff0c;路径1的带宽为100Mbps&#xff0c;延迟2ms&#xff0c;路径2的带宽为50Mbps&#xff0c;迟为4ms&#xff0c;如果EIGRP使用带宽和延迟的综合度量标准&#xff0c;那么该路由器选择的最佳路径是&am…

学习Uni-app开发小程序Day10

前面学习了局部组件的创建和简单使用&#xff0c;今天学习了slot&#xff08;插槽&#xff09;和组件之间的传值1. 插槽的使用 在components中&#xff0c;创建一个组件&#xff0c;给组件设置头部布局、内容布局、底部布局&#xff0c;例如&#xff1a; <template><…

Goby 漏洞发布|瑞友天翼应用虚拟化系统 /hmrao.php SQL注入漏洞

漏洞名称&#xff1a;瑞友天翼应用虚拟化系统 /hmrao.php SQL注入漏洞 English Name&#xff1a; Ruiyou-Tianyi-App-Virtualization-Delivery-Platform /hmrao.php SQL Injection Vulnerability CVSS core: 9.8 影响资产数&#xff1a;75202 漏洞描述&#xff1a; 瑞友天…