鸿蒙系统编译方式

鸿蒙系统编译

  • 编译原理
  • 编译方式
    • 概述
    • 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网站编译相关文档,鸿蒙系统有三种编译方式

命令实现方式
hbOpenHarmony的命令行工具,用来执行编译命令
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.mzph.cn/news/837272.shtml

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

相关文章

设计模式 六大原则之里氏替换原则

文章目录 概念替换逻辑行为不变 拆解小结 概念 子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。 替换 替换的前提是面向对象语言所支持的多态特性,同一个行为具有多个不同表现形式或形态的能力。 逻…

Android adb shell关于CPU核的命令

Android adb shell关于CPU核的命令 先使用命令: adb shell 进入控制台。 然后,直接在$后面输入下面命令,针对CPU的命令。 cat /proc/cpuinfo | grep ^processor | wc -l 查看当前手机的CPU是几核的。 cat sys/devices/system/cpu/online …

Java面试八股之什么是Java反射

什么是Java反射 基本概念 反射是Java语言的一个重要特性,它允许我们在运行时分析类、接口、字段、方法等组件的信息,并能够动态地操作这些组件,包括创建对象、调用方法、访问和修改字段值等。简单来说,反射提供了在程序运行时对…

【kubeflow文档】kubeflow介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习(ML)工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务,而是提供一种直接的方法,将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…

Shell的运行原理和Linux的权限

Shell的运行原理 Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户不能直接使用kernel,而是通过kernel的“外壳程序”,也就是所谓的Shell,来与kernel沟通。 Shell…

Operations Research课程之非线性规划(梯度下降|牛顿法|Gurobi+Python)

目录 1.非线性规划介绍 2.梯度下降法(Gradient descent) 2.1 梯度和Hessians矩阵 2.2 梯度下降算法 2.3 算法举例 3. 牛顿法(Newton’s method) 3.1 适合单变量的牛顿法 3.2 适合多变量的牛顿法 3. 实例(GurobiPython) 3.1 Agricultural Pricing问题描述 3.2 Gurobi…

【论文复刻】堆叠柱状图+饼图

复刻了一下这篇论文里的fig2c:Impacts of COVID-19 and fiscal stimuli on global emissions and the Paris Agreement | Nature Climate Change 效果图: 主要步骤: 1. 数据准备:随机赋值 2. 图像绘制:绘制堆叠柱状…

【C++】可变参数模板简单介绍

前言 可变参数模板是C11中的新特性,它能够让我们创建可以接收可变参数的函数模板和类模板,相比C98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数是一个巨大的改进,通过系统系统推演数据的类型&#xf…

Python笔记-Alchemy中改变表的模式(库schema)

现在是2024-01-10,发到互联网上应该是2024-05-13。查了下chatgpt,麻了,乱七八糟的。 最后还是靠stackoverflow解决的,目前,从解决问题的角度来看,这个还是牛逼点。 原文如下: python - How d…

Ansible常用变量【下】

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前言 在上一篇文章《Ansible常用变量【上】》中,学习了Ansible常用变量的前半部分,放了个五一假&#x…

买货查窜货过程中的可能情况

控价除了要管控渠道中的低价、乱价链接外,还可能需要解决窜货问题,当窜货问题蔓延不及时解决时,渠道会越来越受影响,所以治理窜货也是控价过程中很重要的一步,窜货问题的治理多通过买货溯源来解决,买货要先…

点云分割论文阅读01--FusionVision

FusionVision: A Comprehensive Approach of 3D Object Reconstruction and Segmentation from RGB-D Cameras Using YOLO and Fast Segment Anything FusionVision:使用 YOLO 和 Fast Segment Anything 从 RGB-D 相机重建和分割 3D 对象的综合方法 toread&#x…

拥有一台服务器可以做哪些有趣又实用的事情?

在接触云服务器这个概念你以前,你是不是在想: 可能是,云服务器,这个产品的存在,它可以为你做些什么实用的事情吗? 或者是,云服务器这个看似高大上的科技产品,其实可以为我们的生活…

JVM 自定义类加载器

文章目录 1. 为什么要自定义类加载器1.1 隔离加载类1.2 修改类加载的方式1.3 扩展加载源1.4 防止源码泄漏 2. 自定义类加载器应用场景有哪些3. 两种实现方式 自定义类加载器是Java中的一个高级特性,允许您在运行时动态加载类。通过自定义类加载器,您可以…

论文翻译及部分笔记:LANDMARC: Indoor Location Sensing Using Active RFID

LANDMARC: Indoor Location Sensing Using Active RFID 摘要 移动计算设备和嵌入式技术的日益融合引发了“上下文感知”应用的发展和部署,其中位置是最重要的上下文。在本文中,我们介绍了一种名为LANDMARC的定位感知原型系统,该系统使用射频识…

在云计算与人工智能中,7ECloud扮演着什么样的角色

数据驱动的时代,云计算和人工智能已成为推动现代科技进步的两大引擎。作为一家专注于云计算的公司,7ECloud正是在这个领域发挥自己的力量,力图为企业提供一站式解决方案,并拥有来自厂家的源头支持,用极其低的价格助力企…

QT day5 作业

服务器头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QList> //链表类 #include <QMessageBox> //消息对话框类 #include <QDebu…

vscode无法连接 , .vscode-server版本问题

vscode无法连接 &#xff0c; .vscode-server版本问题 解决办法 &#xff1a; 查看自己的版本号 2. 两边vscode版本号需要一致 找一台vscode可以远程连接的&#xff0c; 将它的.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a 传到 远程服务器上 或者 本地的…

VTK 数据类型:vtkUnstructuredGrid

VTK 数据类型&#xff1a;vtkUnstructuredGrid VTK 数据类型&#xff1a;vtkUnstructuredGridVTK 中数据类型的继承关系常用的几何类型实例&#xff1a;vtkHexahedron 和 vtkTetra VTK 数据类型&#xff1a;vtkUnstructuredGrid 非结构化点是在空间中离散随意分布的点&#xf…

【数据可视化01】matplotlib实例介绍2

目录 一、引言二、实例介绍1.箱线图2.热力图3.3D图 一、引言 接着上一文章【数据可视化01】matplotlib实例介绍1继续介绍matplotlib的实例。 二、实例介绍 在matplotlib中&#xff0c;常用的图形类型包括&#xff1a; 箱线图&#xff08;Box plot&#xff09;&#xff1a;用…