【Openharmony】【4.0R】hello程序之“ohos.gni”模板使用方法

这篇具有很好参考价值的文章主要介绍了【Openharmony】【4.0R】hello程序之“ohos.gni”模板使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Openharmony】【4.0R】hello程序之“ohos.gni”模板使用方法

lite_component.gni虽然好用,但是毕竟是个“轻量-组件”模板。
这里记录下较为常用的“ohos.gni”模板使用方法。
OH版本:4.0Release
内核版本:LiteOS-A
产品版本:qemu_small_system_demo

ohos.gni模板

相比lite_component.gni模板,ohos.gni模板要复杂多了,关于该模板教程也很多。
首先依然是要先import才能使用模板方法

import("//build/ohos.gni")

在Openharmony看ohos.gni会发现,这个模板实际上是一堆模板通过import结合起来的,内容还是较多的,但是我们要用的实际在import(“//build/templates/cxx/cxx.gni”)这里。

//ohos.gni
import("//build/config/sanitizers/sanitizers.gni")
import("//build/ohos/ndk/ndk.gni")
import("//build/ohos/notice/notice.gni")
import("//build/ohos/sa_profile/sa_profile.gni")
import("//build/ohos_var.gni")
import("//build/toolchain/toolchain.gni")

# import cxx base templates
import("//build/templates/cxx/cxx.gni")
if (support_jsapi) {
  import("//build/ohos/ace/ace.gni")
  import("//build/ohos/app/app.gni")
}

import("//build/templates/common/ohos_templates.gni")

# import prebuilt templates
import("//build/templates/cxx/prebuilt.gni")
if (build_cross_platform_version) {
  import("//build_plugins/templates/java/rules.gni")
} else {
  import("//build/templates/bpf/ohos_bpf.gni")
  import("//build/templates/rust/ohos_cargo_crate.gni")
  import("//build/templates/rust/rust_bindgen.gni")
  import("//build/templates/rust/rust_cxx.gni")
  import("//build/templates/rust/rust_template.gni")
}

import("//build/templates/idl/ohos_idl.gni")

//build/templates/cxx/cxx.gni

在cxx.gni里面,才真正定义了我们要使用的模板,有兴趣的可以仔细阅读cxx.gni内容

template(“ohos_executable”)

可以看到ohos_executable内部使用的是executable,在lite_component.gni那个例子中用的也是executable生成可执行文件。如果熟悉gn,应该知道executable是gn原本就支持的功能,这里ohos_executable就是对executable进行了封装。

template("ohos_executable") {
...
  executable("${target_name}") {
  ...
  }
}
template(“ohos_shared_library”)

同上,ohos_shared_library对shared_library进行了封装。

template("ohos_shared_library") {
...
  shared_library("${target_name}") {
  ...
  }
}
template(“ohos_static_library”)
template("ohos_static_library") {
...
  static_library(target_name) {
  ...
  }
}
template(“ohos_source_set”)
template("ohos_source_set") {
...
  source_set(target_name) {
  ...
  }
}

实际上使用ohos_executable和ohos_shared_library就够了。

准备工作

使用ohos.gni模板需要提供两部分信息:子系统,部件。为了和原有子系统、部件区分,针对hello程序可以新建单独的子系统和部件。

子系统

在"build/subsystem_config.json"中新加一个“hellotestsystem”子系统

   "hellotestsystem":{
    "path":"testhello",
    "name":"hellotestsystem"
  },

部件

在项目目录中新建bundle.json
文件结构:

testhello/
└── hello_ohos
    ├── BUILD.gn
    ├── bundle.json
    ├── include
    │   └── hello.h
    ├── src
    │   └── hello.cpp
    └── test
        └── test_hello.cpp

bundle.json内容如下,设置名为hellotestpart的部件
重点看“component”:的内容,
name 部件名
subsystem 部件所属子系统
deps 部件依赖
sub_componrnt 部件中组件编译入口

{
    "name": "@ohos/hellotestpart",
    "description": "Hello example.",
    "version": "4.0",
    "license": "Apache License 2.0",
    "publishAs": "code-segment",
    "segment": {
        "destPath": "testhello/hello_ohos"
    },
    "dirs": {},
    "scripts": {},
    "component": {
        "name": "hellotestpart",
        "subsystem": "hellotestsystem",
        "syscap": [],
        "features": [],
        "adapted_system_type": [ "mini", "small", "standard" ],
        "rom": "10KB",
        "ram": "10KB",
        "deps": {
            "components": [],
            "third_party": []
        },
        "build": {
            "sub_component": [
                "//testhello/hello_ohos:test_hello"
            ],
            "inner_kits": [],
            "test": []
        }
    }
}

添加编译选项

在"vendor/ohemu/qemu_small_system_demo/config.json"中将子系统和部件添加到编译选项里

      {
        "subsystem": "hellotestsystem",
        "components": [
          { "component": "hellotestpart", "features":[] }
        ]
      },

头文件

//hello.h
#include <iostream>
void helloTest();

动态库源文件

//hello.cpp
#include "hello.h"
void helloTest()
{
    std::cout << "Hello, lyxqg, this is ohos!" << std::endl;
    return;
}

主函数源文件

//test_hello.cpp
#include "hello.h"
int main()
{
    helloTest();
    return 0;
}

BUILD.gn

import("//build/ohos.gni")

libsources = [
    "src/hello.cpp",
]

config("testhelloliteinclude")
{
    include_dirs = [
        "include"
    ]
    cflags = [ "-Wall" ]
    cflags_cc = cflags
    ldflags = [ "-Wl,-rpath-link=$ohos_root_path/$root_out_dir" ]
}

ohos_shared_library("hellotest")
{
    sources = libsources
    configs = [ ":testhelloliteinclude" ]
    output_name = "hellotestv2.0"
    part_name = "hellotestpart"
    subsystem_name = "hellotestsystem"
}

exesources = [
    "test/test_hello.cpp"
]

ohos_executable("test_hello") {
  sources = exesources
  configs = [":testhelloliteinclude"]
  deps = [
    ":hellotest",
  ]
  output_name = "test_hello"
  part_name = "hellotestpart"
  subsystem_name = "hellotestsystem"
}

注意事项

1.ohos.gni模板内禁止修改output_dirs,所以不要在BUILD.gn中设置output_dirs选项。
2.使用ohos.gni模板时可以使用deps去依赖lite_component模板中的库,测试发现lite_component里也不要写output_dirs,不然编译虽然通过,但是进入系统执行命令发现找不到库文件。

最后
oh4.0,Openharmony4,harmonyos文章来源地址https://www.toymoban.com/news/detail-769331.html

到了这里,关于【Openharmony】【4.0R】hello程序之“ohos.gni”模板使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法

    本文讲述了帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法。涉及针对帝国CMS源码的修改。分享给大家供大家参考,具体如下: 一、问题: 在项目开发中需要在首页调用专题,且专题增加了“专题自定义字段”:副标题(ftitle),需要在栏目名调用出比较

    2023年04月20日
    浏览(48)
  • 3 开源鸿蒙OpenHarmony4.1源码下载、编译,生成OHOS_Image可执行文件的最简易流程

    作者 将狼才鲸 日期 2024-03-01 准备一台Windows电脑 安装VMware或者VMware Player虚拟机 从华为镜像下载Ubuntu系统,用国内源下载速度更快 Ubuntu 镜像说明 https://repo.huaweicloud.com/ubuntu-releases/ 选择要下载的系统版本 https://repo.huaweicloud.com/ubuntu-releases/18.04.6/ubuntu-18.04.6-desktop-amd64.iso 我使用

    2024年04月11日
    浏览(56)
  • openharmony开发最新4.0版本---数据库连接(二)(基于api10,devstudio4.0) 中relationalStore的使用

    如下代码是一个工具类,可以自己导入到自己项目中,在入口文件中初始化即可使用,使用示例放在下节中 import relationalStore from \\\'@ohos.data.relationalStore\\\' import common from \\\'@ohos.app.ability.common\\\'; import { BusinessError } from \\\'@ohos.base\\\'; import { ValuesBucket, ValueType } from \\\'@ohos.data.ValuesBucket\\\'; const

    2024年01月18日
    浏览(47)
  • OpenHarmony-4.0-Release 源码编译记录

    本文基于 Ubuntu 20.04.4 LTS 这个没啥好说的,都是搞机的,用之前编译 aosp 的 linux 环境就行,有小伙伴担心会把之前的环境搞崩, 也有用 docker 编译的,我这里就直接在 aosp 环境下搞了,还省事。 安装下面这三东西,是为了下载 Harmony 源码 sudo apt install curl sudo apt install python3

    2024年02月05日
    浏览(48)
  • OpenHarmony 4.0 Release 编译异常处理

    编译环境:Ubuntu 20.04 OpenHarmony 软件版本:4.0 Release 设备平台:rk3568 参考官网步骤: OpenHarmony 4.0 Release 源码获取 参考官网构建步骤: v4.0 Release 编译构建 如果上述步骤一切顺利,编译通过,build log如下: 下拉代码执行报错 unable to resolve “fork_flow”\\\" 表明repo工具无法解析名为

    2024年02月05日
    浏览(50)
  • Docker 编译OpenHarmony 4.0 release

    编译环境:Ubuntu 20.04 OpenHarmony版本:4.0 release 平台设备:RK3568 OpenHarmony 3.2更新至OpenHarmony 4.0后,公司服务器无法编译通过,总是在最后几十个文件时报错,错误码4000: 经分析尝试: 1、相同的步骤和命令,wsl2 编译OpenHarmony 4.0 r正常。 2、服务器使用sudo编译正常,但由于sudo使

    2024年02月03日
    浏览(48)
  • E2000/飞腾派运行OpenHarmony 4.0

    该项目介绍了如何在飞腾嵌入式开发平台上运行OpenHarmony 4.0 release标准系统。 该项目支持芯片内置提供的视频解码硬件加速,支持硬件光标加速,基于Linux kernel 5.10开发。 ├── device_board_phytium #飞腾开发板代码仓库 ├── device_soc_phytium #飞腾芯片代码仓库 ├── phytium_en

    2024年04月17日
    浏览(69)
  • openharmony开发最新4.0版本----介绍openharmony(基于api10 ,华为dev studio 4.0,分享学习过程中遇到的难题难点),学习笔记,持续更新

            DevEco Studio(OpenHarmony)使用指南:         HUAWEI DevEco Studio For OpenHarmony(以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向OpenHarmony全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的Open

    2024年02月03日
    浏览(44)
  • OpenHarmony应用签名 - 系统应用签名(4.0-Release)

    开发环境:Windows 11 DevEco Studio 版本:DevEco Studio 4.0 Release(4.0.0.600) SDK 版本:4.0.10.15(Full SDK) 开发板型号:DAYU 200(RK3568) 系统版本:OpenHarmony-4.0-Release 示例工程:Applications_SystemUI OpenHarmony开源社区提供了标准系统上的部分系统应用,如桌面、SystemUI、设置等,为开发者提

    2024年04月11日
    浏览(39)
  • OpenHarmony 4.0 源码编译hb 问题排查记录

    OS:Ubuntu 22.04 x86_64 下载好Openharmony 4.0Beta2 的源码 从错信息看是找到某个目录,hb 是python写的,所以打算看看源码是找个目录出错了,根据出错信息直接看源码文件。 查看python 代码可知报错原因是没找到 build/lite/hb_internal ,在OpenHamony 源码下确实没有发现有 build/lite/hb_internal

    2024年02月09日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包