OpenHarmony下GN语法普法

本文详细介绍了OpenHarmony环境中GN语言的基本概念,包括表达式语言、作用域、数据类型(如整形、字符串和列表)、条件语句、循环、函数调用以及构建配置中的目标和标签。读者可以借此了解GN语法的核心要素和实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    OpenHarmony下GN语法普法



引言

前面一直在折腾怎么移植,怎么编写,尼玛忘了搞最基本的GN语法了。这不必须给安排上!




一.GN表达式语言和GN作用域

GN 是简单的动态类型的命令式语言,其最终目的只是产生声明性的 Ninja 规则。一切都围绕作用域决定,它既是该语言的词法绑定(lexical binding,即静态绑定)结构,也是数据类型。

GN 值可以使用下列几种类型的任何一种:

  • 布尔型(boolean),或 true 或 false
  • 整型(integer),带符号,使用普通十进制语法;不常用
  • 字符串(string),总是使用"双引号"引住(注意下面关于 $ 的扩展)
  • (scope),使用花括号括住 { … };见下。
  • 值列表(list of values),使用方括号括住:[ 1, true, “foo”, { x=1 y=2 } ]是一个四元素列表。

值是动态类型的,因而没有隐式类型的强迫,但也就没有这样的类型检查。不同类型的值比较结果永不相等,但是比较它们并不是错误。

字符串字面值在双引号中将简单的 $var 或 v a r 表达式扩展。这是一种立即扩展( i m m e d i a t e e x p a n s i o n ):当 v a r 为字符串时, x {var} 表达式扩展。这是一种立即扩展(immediate expansion):当 var 为字符串时,x var表达式扩展。这是一种立即扩展(immediateexpansion):当var为字符串时,x{var}y 与 x + var + y 相同。这样,任何值都可以表示为打印美观的字符串。

字母、数字和下划线组成的标志符可以通过赋值运算符填充一个域。GN 语言所做的实际上就是使用 = 进行命令式赋值,并通过 += 进行修改(也有一些特殊的方式来产生副作用,如 print(),用于调试;又如 write_file(),谨慎使用)。


1.1 整形

整形就比较简单了,形如:

x = 1
y = 2

关于这块有如下几点需要注意:

  • GN语法是空白不敏感的
  • GN语法不支持 ?= 这种

1.2 Strings 字符串</

### OpenHarmonyGN 文件的作用及用法 #### 一、GN 的基本概念 GN 是 Google 开发的一种元构建系统,用于定义软件项目的结构和依赖关系。它通过描述文件(通常是 `BUILD.gn`),指定目标及其属性来控制构建过程[^1]。 #### 二、GN 文件的主要作用 在 OpenHarmony 系统中,GN 文件主要用于以下几个方面: - **模块化管理**:支持开发者将项目划分为多个独立的模块,并清晰地定义这些模块之间的依赖关系。 - **跨平台兼容性**:提供统一的方式处理不同硬件架构下的编译需求,简化多设备开发流程。 - **高效配置能力**:允许灵活设置编译选项,例如启用或禁用特定功能、调整优化级别等[^2]。 #### 三、GN 文件的基本语法 以下是 GN 文件的一些核心组成部分以及它们的功能解释: ##### 1. 变量声明与赋值 变量可以在 GN 脚本中用来存储字符串或其他数据类型,方便后续引用。 ```gn target_name = "example_module" sources = [ "main.cc", "helper.cc" ] ``` ##### 2. 定义目标 (targets) 每个 BUILD.gn 文件至少包含一个 target 声明,表示要生成的目标产物。 ```gn executable("my_executable") { sources = [ "program.cc" ] } ``` 上述代码片段创建了一个可执行文件目标 my_executable,其中指定了所需的源文件列表。 ##### 3. 配置公共参数 为了减少重复劳动并保持一致性,可以通过 public_configs 或 configs 属性共享某些设定给其他 targets 使用。 ```gn config("default_config") { cflags = [ "-Wall", "-Werror" ] } shared_library("library_with_defaults") { public_configs += [ ":default_config" ] } ``` #### 四、实际案例解析——基于 HDF 驱动开发 假设我们正在为 OpenHarmony 添加一个新的 KHDF 示例驱动,则需要按照如下步骤操作: 1. **新建目录结构** 在合适位置建立子目录存放新组件的相关资源,比如 drivers/sample/khdf_example/[^3]。 2. **编写 BUILD.gn 文件** 下面展示了一段简单的 BUILD.gn 内容作为示范: ```gn import("//build/lite/configs/hdf.gni") hdf_driver("khdf_example") { source_set("src") { sources = [ "driver.c", "interface.h" ] } } ``` 此脚本首先导入了预定义好的宏 hdf.gni 来辅助完成常见任务;接着利用 hdf_driver 函数封装整个驱动逻辑,内部再嵌套 source_set 明确指出参与编译的具体单元。 #### 五、总结 通过对以上内容的学习可以看出,在 OpenHarmony 平台之上运用 GN 工具能够极大地提升工作效率,无论是从组织大型工程还是快速迭代小型实验的角度来看都是不可或缺的技术手段之一。 ```python print("This is an example of Python code block.") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值