OpenHarmony下gn相关使用

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

     OpenHarmony下gn相关使用



引言

为了提高OpenHarmony下移植vivante gpu的成功率,先得把准备工作做足了,这样后续就好搞了。所以本文档的核心工作介绍GN构建工具在OpenHarmony中的常见使用方法,指导三方库由cmake或者其它的脚本构建到GN构建的转换!




一.GN常用的内置变量

名称 描述
current_cpu 当前工具链的处理器架构
current_os 当前工具链的操作系统类型
current_toolchain 表示当前使用的工具链
default_toolchain 表示默认使用的工具链
target_cpu 表示目标平台的CPU类型
target_os 表示目标平台的操作系统类型
root_build_dir 表示根目录的构建目录
root_gen_dir 表示根目录的生成目录
root_out_dir 表示根目录的输出目录
target_out_dir 表示目标文件的输出目录
target_gen_dir 表示中间文件的生成目录
defines 表示当前目标的预定义宏列表
include_dirs 表示当前目标的头文件搜索路径列表
cflags 表示当前目标的C语言编译选项列表
cxxflags 表示当前目标的C++语言编译选项列表
ldflags 表示当前目标的连接选项列表
asmflags 表示当前目标的汇编语言编译选项列表
libs 表示当前目标依赖的库文件列表



二.GN常用的内置函数

名称 描述
assert() 断言函数,如果条件不成立,则会抛出一个异常
defined() 判断变量是否已经定义
exec_script() 执行一个Python脚本
get_label_info() 获取标签信息,例如标签的名称、路径、类型等等
get_path_info() 获取路径信息,例如路径是否存在、是否是目录、是否是文件等等
group() 将一组目标文件组合成一个库文件
import() 导入其它GN构建文件
read_file() 读取文件内容
read_json() 读取JSON格式的文件
read_path() 读取路径中的内容,返回一个字符串列表
rebase_path() 重新定位路径,将路径中的某个部分替换为新的值
write_file() 写入文件内容
template() 处理字符串模板,将模板中的变量替换为实际的值,其功能类似与函数
action() 定义一个自定义的构建动作,通过action调用python脚本完成期望动作
action_foreach() 针对每个元素执行一个自定义的构建动作
executable() 定义一个可执行文件
shared_library() 定义一个动态库
static_library() 定义一个静态库



三.如何使用

当使用GN进行相关的构建时,需要了解如何指定动态库、静态库和可执行文件的构建规则。以下是一个简单的指南,介绍如何在GN中指定这些构建规则:


3.1 动态库

在GN中,可以使用shared_library模板来指定动态库的构建规则,创建BUILD.gn文件,内容如下:


# 指定动态库名称
mylib_name = "mylib"

# 指定动态库源文件
mylib_sources = [
  "src/foo.cpp",
  "src/bar.cpp",
]

# 指定动态库编译选项和链接选项
mylib_cflags = [
  "-Wall",
]
mylib_ldflags = [
  "-L/usr/local/lib",
]

# 指定动态库构建规则
shared_library(mylib_name) {
  sources = mylib_sources
  cflags = mylib_cflags
  ldflags = mylib_ldflags
}

### 3.2 静态库

在GN中,可以使用static_library模板来指定静态库的构建规则,创建BUILD.gn文件,内容如下:

# 指定静态库名称

# 指定静态库源文件
mylib_sources = [
    "src/foo.cpp",
    "src/bar.cpp"
]

# 指定静态库编译选项
mylib_cflags = [
    "-Wall",
]

# 指定静态库的构建规则
static_library(mylib_name){
    sources = mylib_sources
    cflags = mylib_cflags
}

### 3.3 可执行文件

在GN中,可以使用executable模板来指定可执行文件的构建规则。例如:

# 指定可执行文件名称
myapp_name = "myapp"

# 指定可执行文件源文件
myapp_sources = [
    "src/main.cpp",
]

# 指定可执行文件编译选项和链接选项
myapp_cflags = [
    "-Wall",
]
myapp_ldflags = [
    "-L/usr/local/lib",
]

# 指定可执行文件构建规则
executable(myapp_name){
    sources = myapp_sources
    cflags = myapp_cflags
    ldflags = myapp_ldflags
}

3.4 GN在OpenHarmony上的扩展

OpenHarmony在GN原生模板的基础上进行了功能扩展,提供了ohos_shared_library、ohos_static_library、ohos_executable模板,在BUILD.gn中import(“//build/ohos.gni”)即可使用,ohos_shared_library示例如下:

import("//build/ohos.gni")
ohos_shared_library("helloworld") {
  sources = []
  include_dirs = []
  cflags = []
  cflags_c = []
  cflags_cc = []
  ldflags = []
  configs = []
  deps = []  # 部件内模块依赖

  # 跨部件模块依赖定义,
  # 定义格式为 "部件名:模块名称"
  # 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块
  external_deps = [
    "part_name:module_name",
  ]

  output_name = ""           # 可选,模块输出名
  output_extension = ""      # 可选,模块名后缀
  module_install_dir = ""    # 可选,缺省在/system/lib64或/system/lib下, 模块安装路径,模块安装路径,从system/,vendor/后开始指定
  relative_install_dir = ""  # 可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置不生效
  install_images = []        # 可选,缺省值system,指定模块安装到那个分区镜像中,可以指定多个

  part_name = "" # 必选,所属部件名称
}



写在最后

好了今天的博客OpenHarmony下gn相关使用就到这里了。总之,青山不改绿水长流先到这里了。如果本博客对你有所帮助,麻烦关注或者点个赞,如果觉得很烂也可以踩一脚!谢谢各位了!!

友情参考:

1.OpenHarmony下cmake转gn指导
2.OpenHarmony标准系统如何添加一个模块

前面两个文档是官方aosp下Build/doc下面的文档

3.gn语法及在鸿蒙的使用文章来源地址https://www.toymoban.com/news/detail-832824.html

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

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

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

相关文章

  • GN快速上手

    最近在研究鸿蒙操作系统的开源项目OpenHarmony,该项目使用了GN+Ninja工具链进行配置,编译,于是开始研究GN如何使用。 本文的所有信息均来自GN官网和本人个人体会。 GN的主要功能是根据配置文件(.gn, BUILD.gn等)生成build.ninja文件。build.ninja类似于Makefile,不同的是由Ninja负责

    2024年02月13日
    浏览(41)
  • Openharmony使用hdc提效

    告别串口卡顿调试🐸hdc增效大法🐸,工作环境主要是Linux,所以主要是介绍Linux环境下使用喔~ Author Date Version Description 陈梓归 2023-06-13 V1.0 第一个版本 hdc(HarmonyOS Device Connector)是HarmonyOS为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与 真实

    2024年02月09日
    浏览(35)
  • OpenHarmonyOS-gn与Ninja

    GN语法及在鸿蒙的使用 [gn+ninja学习 0x01]gn和ninja是什么 ohos_sdk/doc/subsys-build-gn-coding-style-and-best-practice.md GN 语言与操作 gn是generate ninja的缩写,它是一个元编译系统(meta-build system),是ninja的前端,gn和ninja结合起来,完成OpenHarmony操作系统的编译任务。 元构建系统是一个生成其他

    2024年01月20日
    浏览(50)
  • [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日
    浏览(34)
  • openHarmony使用Napi开发样例

    代码gitee路径 Napi在开发工程中的指导         1.2.1 cmake引入按照napi处理后的模块生成一个可以让ninja编译的文件配置。         1.2.2 并且要把cmakelist文件引入到当前模块的打包构建文件中。 在这个代码片段中, sizeof(desc) / sizeof(desc[0])  是用来计算  desc  数组中的元素个数

    2024年03月27日
    浏览(47)
  • OpenHarmony 使用 ArkUI Inspector 分析布局

    ● 摘要:视图的嵌套层次会影响应用的性能,开发者应该移除多余的嵌套层次,缩短组件刷新耗时。本文会介绍如何使用 ArkUI Inspector 工具分析布局,提示应用响应性能。 ● :列举本文相关的:OpenHarmony HarmonyOS 鸿蒙 Inspector 布局检查器 视图嵌套 应用将布

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

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

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

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

    2024年02月05日
    浏览(45)
  • OpenHarmony SDK 升级助手使用教程【坚果派-坚果】

    作者:坚果 团队:坚果派 公众号:“大前端之旅” 团队介绍:坚果派由坚果创建,团队拥有8个华为HDE,3个HSD,以及若干其他领域的三十余位万粉博主运营。 本人为华为HDE、中国计算机学会CCF专业会员、OpenHarmony布道师、开发者联盟优秀讲师、2023年开源之夏导师、2023年Op

    2024年01月20日
    浏览(46)
  • OpenHarmony:如何使用HDF驱动控制LED灯

    该程序是基于OpenHarmony标准系统编写的基础外设类:RGB LED。 目前已在凌蒙派-RK3568开发板跑通。详细资料请参考官网:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony/tree/master/samples/b02_hdf_rgb_led。 详细资料请参考OpenHarmony官网: GPIO平台驱动开发 GPIO应用程序开发 RGB LED灯

    2024年02月09日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包