OpenHarmonyOS-gn与Ninja

这篇具有很好参考价值的文章主要介绍了OpenHarmonyOS-gn与Ninja。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GN语法及在鸿蒙的使用
[gn+ninja学习 0x01]gn和ninja是什么
ohos_sdk/doc/subsys-build-gn-coding-style-and-best-practice.md
GN 语言与操作

一、gn简介

gn是generate ninja的缩写,它是一个元编译系统(meta-build system),是ninja的前端,gn和ninja结合起来,完成OpenHarmony操作系统的编译任务。
元构建系统是一个生成其他构建系统的构建系统,cmake就是一个非常典型的元构建系统。本系统文章要学习的gn也是个元构建系统。

类别 gn+ninja cmake+make
元构建系统 gn cmake
构建系统 ninja make
元构建文件 BUILD.gn CMake.txt
构建文件 *.ninja Makefile

二、代码风格

命名

总体上遵循Linux kernel的命名风格,即小写字母+下划线的命名风格。

局部变量

我们这里对局部变量的定义为:在某作用域内,且不向下传递的变量。

为了更好的区别于全局变量,局部变量统一采用下划线开头。

# 例1 action运行脚本生成文件.
action("some_action") {
  ...
  # _output是个局部变量,所以使用下划线开头
  _output = "${target_out_dir}/${target_name}.out"
  outputs = [ _output ]
  args = [
    ...
      "--output",
      # 使用rebase_path转换目录.将相对于当前目录的文件名转换为根目录
      rebase_path(_output, root_build_dir),
      ...
  ]
  ...
}

全局变量

全局变量使用小写字母开头。

如果变量值可以被gn args修改,则需要使用declare_args来声明,否则不要使用declare_args。

#例2
declare_args() {
  # 可以通过gn args来修改some_feature的值
  some_feature = false
}

目标命名

目标命名采用小写字母+下划线的命名方式。

模板中的子目标命名方式采用"${target_name}+双下划线+后缀"的命名方式。这样做有两点好处:

加入"${target_name}"可以防止子目标重名。

加入双下划线可以很方便地区分出子目标属于哪一个模块,方便在出现问题时快速定位。

# 例3
#template是 GN 复用代码的主要方式.通常,模板扩展为一个或多个其他目标类型.
template("ohos_shared_library") {
  # "{target_name}"(主目标名)+"__"(双下划线)+"notice"(后缀)
  _notice_target = "${target_name}__notice"
  collect_notice(_notice_target) {
    ...
  }
  shared_library(target_name) {
    ...
  }
}

自定义模板的命名

推荐采用动宾短语的形式来命名。

# 例4
# Good
template("compile_resources") {
  ...
}

格式化

gn脚本在提交之前需要执行格式化。格式化可以保证代码对齐,换行等风格的统一。使用gn自带的format工具即可。命令如下:

$ gn format path-to-BUILD.gn

gn format会按照字母序对import文件做排序,如果想保证import的顺序,可以添加空注释行。

假设原来的import顺序为:

# 例5
import("//b.gni")
import("//a.gni")

经过format之后变为:
import("//a.gni")
import("//b.gni")

如果想保证原有的import顺序,可以添加空注释行。
import("//b.gni")
# Comment to keep import order
import("//a.gni")

三、编码实践

gn文件中很多内置变量,列举常用变量如下:

import:将文件导入当前范围.
print:打印到控制台.
rebase_path:将文件或目录重新定位到另一个位置.
template:定义模板规则.
defined:返回是否定义了标识符.
asmflags:[string list]传递给汇编程序的标志.
cflags:[string list]传递给所有C编译器变量的标志.
ldflags:[string list]传递给链接器的标志.
libs:[string list]链接的附加库.
sources:[ file list ] 目标源文件 .

坚持就有收获!

OpenHarmonyOS-gn与Ninja,harmonyOS鸿蒙攻城记,harmonyos文章来源地址https://www.toymoban.com/news/detail-807910.html

到了这里,关于OpenHarmonyOS-gn与Ninja的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenHarmony下GN语法普法

    前面一直在折腾怎么移植,怎么编写,尼玛忘了搞最基本的GN语法了。这不必须给安排上! GN 是简单的动态类型的命令式语言,其最终目的只是产生声明性的 Ninja 规则。一切都围绕作用域决定,它既是该语言的词法绑定(lexical binding,即静态绑定)结构,也是数据类型。 G

    2024年02月21日
    浏览(40)
  • [GN] Vue3快速上手1

    Vue2 展示 官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create vue 3.0 作为组合式API setup执行很早,在beforeCreate之前执行一次。 Vue3.0中一个新的配置项 setup是所有 Composition API(组合API) 表演的舞台 ”。 组件中所用到的:数据、方法等等,均要配置在setup中。 注意点:

    2024年01月20日
    浏览(36)
  • BN,LN,IN,GN的理解和用法

    绿色区域表示将该区域作用域(四种方法都贯穿了w,h维度) ,即将该区域数值进行归一化,变为均值为0,标准差为1。BN的作用区域时N,W,H,表示一个batch数据的每一个通道均值为0,标准差为1;LN则是让每个数据的所有channel的均值为0,标准差为1。IN表示对每个数据的每个通道的均

    2024年02月05日
    浏览(47)
  • [GN] Vue3.2 快速上手 ---- 核心语法2

    用在普通 DOM 标签上,获取的是 DOM 节点。 用在组件标签上,获取的是组件实例对象。 用在普通 DOM 标签上: 用在组件标签上: 父组件App使用子组件Person Person组件标签上使用ref 可以获取组件实例 但需要子组件代码中 使用defineExpose暴露内容 App.vue是父组件,Person是子组件 父

    2024年01月21日
    浏览(60)
  • OpenHarmony网络协议通信—libevent [GN编译] - 事件通知库

    libevent主要是用C语言实现了事件通知的功能 直接在OpenHarmony-SIG仓中搜索libevent并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 库代码存放路径:./third_party/libevent 修改添加依赖的编译脚本 在/developtools/bytrace_standard/ohos.build文件中添加修改 “//third_party/libevent:libevent_targe

    2024年04月29日
    浏览(40)
  • [GN] 使用vue3+vite+ts+prettier+eslint

    做到代码格式等统一,此时,esint和prettier就要登场了。 eslint是代码检测工具,可以检测出你代码中潜在的问题,比如使用了某个变量却忘记了定义。 prettier是代码格式化工具,作为代码格式化工具,能够统一你或者你的团队的代码风格。 = 安装prettier+eslint包,并做一系列的

    2024年01月16日
    浏览(59)
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)

    提示:前端项目一定要先引入组件 配置。再编码!!!! 使用·安装脚手架工具: 创建项目: 脚手架已经帮我们配置了代码美化、自动校验、格式化插件等,无需再自行配置 但是需要在 webstorm 里开启代码美化插件: setting 中 搜索Prettier 启用 prettier 组件库:https://arco.desi

    2024年01月20日
    浏览(35)
  • 腾讯云GPU服务器GN7实例NVIDIA T4 GPU卡

    腾讯云GPU服务器GN7实例搭载1颗 NVIDIA T4 GPU,8核32G配置,系统盘为100G 高性能云硬盘,自带5M公网带宽,系统镜像可选Linux和Windows,地域可选广州/上海/北京/新加坡/南京/重庆/成都/首尔/中国香港/德国/东京/曼谷/硅谷/弗吉尼亚节点,腾讯云百科分享腾讯云GPU服务器配置表: 目录

    2024年02月12日
    浏览(43)
  • Pytorch学习笔记(8):正则化(L1、L2、Dropout)与归一化(BN、LN、IN、GN)

     一、正则化之weight_decay(L2正则) 1.1 正则化及相关概念 1.2 正则化策略(L1、L2) (1)L1正则化 (2)L2正则化 1.3 L2正则项——weight_decay 二、正则化之Dropout 2.1 Dropout概念 2.2 nn.Dropout  三、归一化之Batch Normalization(BN层) 3.1 Batch Normalization介绍 3.2 Pytorch的Batch Normalization 1d

    2024年02月04日
    浏览(43)
  • yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络

    yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络 1、引荐HorNet递归门控卷积思想 论文地址: https://arxiv.org/pdf/2207.14284.pdf 递归门控卷积GnConv模块: 主要思想:通过门控卷积和递归设计执行高阶空间交互,新的操作具有高度的灵活性和可定制性,将自注意力中

    2023年04月27日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包