当前位置: 首页 > article >正文

深入解析 OpenHarmony 构建系统-3-GN 构建系统管理脚本

引言

OpenHarmony作为一款面向全场景的分布式操作系统,其构建系统在开发过程中扮演着至关重要的角色。本文将详细介绍OpenHarmony构建系统下的一个gn封装脚本,该脚本用于管理和执行 gn 命令,更高效地管理构建过程。
位置:/build/hb/services/gn.py

脚本概述

该脚本定义了一个 Gn 类,继承自 BuildFileGeneratorInterface 接口,并实现了多个方法来执行不同的 gn 命令。这些命令包括生成构建文件、查询路径、描述目标、列出目标、引用检查、格式化和清理等。

脚本结构
1. 导入必要的模块
import sys
import os
from enum import Enum

from containers.status import throw_exception
from exceptions.ohos_exception import OHOSException
from services.interface.build_file_generator_interface import BuildFileGeneratorInterface
from resources.config import Config
from containers.arg import Arg, ModuleType
from util.system_util import SystemUtil
from util.io_util import IoUtil
from util.log_util import LogUtil
  • sysos 模块用于处理系统相关的操作。
  • Enum 用于定义枚举类型。
  • throw_exception 是一个装饰器,用于捕获和处理异常。
  • OHOSException 是自定义的异常类。
  • BuildFileGeneratorInterface 是接口类,定义了构建文件生成器的基本方法。
  • Config 类用于读取和管理配置文件。
  • ArgModuleType 用于处理命令行参数。
  • SystemUtilIoUtil 提供系统和输入输出相关的工具函数。
  • LogUtil 用于日志记录。
2. 定义枚举类型 CMDTYPE
class CMDTYPE(Enum):
    GEN = 1
    PATH = 2
    DESC = 3
    LS = 4
    REFS = 5
    FORMAT = 6
    CLEAN = 7
  • CMDTYPE 枚举类型定义了 gn 命令的类型,包括生成构建文件 (GEN)、查询路径 (PATH)、描述目标 (DESC)、列出目标 (LS)、引用检查 (REFS)、格式化 (FORMAT) 和清理 (CLEAN)。
3. Gn 类定义
class Gn(BuildFileGeneratorInterface):
    def __init__(self):
        super().__init__()
        self.config = Config()
        self._regist_gn_path()

    def run(self):
        self.execute_gn_cmd(CMDTYPE.GEN)
  • Gn 类继承自 BuildFileGeneratorInterface 接口。
  • __init__ 方法初始化 Gn 类实例,读取配置文件并注册 gn 可执行文件路径。
  • run 方法默认执行生成构建文件的命令。
4. 注册 gn 可执行文件路径
@throw_exception
def _regist_gn_path(self):
    gn_path = os.path.join(self.config.root_path, 'prebuilts/build-tools/{}-x86/bin/gn'
            .format(sys.platform))
    if os.path.exists(gn_path):
        self.exec = gn_path
    else:
        raise OHOSException(
            'There is no gn executable file at {}'.format(gn_path), '0001')
  • _regist_gn_path 方法根据系统平台查找 gn 可执行文件的路径,并存储在 self.exec 中。
  • 如果路径不存在,抛出 OHOSException 异常。
5. 转换注册的参数和标志
def _convert_args(self) -> list:
    args_list = []
    for key, value in self.args_dict.items():
        if isinstance(value, bool):
            args_list.append('{}={}'.format(key, str(value

http://www.kler.cn/a/396632.html

相关文章:

  • CDH安装与配置及相关大数据组件实践
  • 如何处理 iOS 客户端内 Webview H5 中后台播放的音视频问题
  • SystemVerilog学习——类的继承
  • 【Conda】Windows下conda的安装并在终端运行
  • 【代码大模型】Is Your Code Generated by ChatGPT Really Correct?论文阅读
  • NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议
  • 我要成为算法高手-二分查找篇
  • 【大数据学习 | HBASE高级】hbase的API操作
  • C# 中Math.Round 和 SQL Server中decimal(18,2) 不想等的问题
  • 大数据实训室建设的必要性
  • asp应用-Access|IIS|
  • [含文档+PPT+源码等]精品大数据项目-python基于Spark实现的新闻推荐系统的设计与实现
  • Rust学习(五):泛型、trait
  • 网络游戏安全现状及相关应对方案
  • ODX架构开发流程
  • fpga 同步fifo
  • 算法---解决“汉诺塔”问题
  • Java面试之多线程并发篇(4)
  • 学习日记_20241115_聚类方法(层次聚类)
  • 1+X应急响应(网络)系统备份:
  • 11.13机器学习_线性回归
  • 搭建Spring gateway网关微服务
  • DApp开发:定制化解决方案与源码部署的一站式指南
  • 动态规划与贪心算法:核心区别与实例分析
  • 《Django 5 By Example》阅读笔记:p105-p164
  • C# 自动属性