OpenHarmony开源三方库的cmake在IDE上直接引用的问题

server/2024/9/23 12:28:55/

前言

DevEco Studio的native工程的C/C++部分当前只支持cmake脚本的编译,工程的目录结构如下图所示

在工程中引用第三方库有如下三种方式,

一、find_package模式

通过find_package,可以在指定目录下去搜索已安装的库(三方库构建完后执行install,会生成xxx-config.cmake之类的文件在安装目录下),如果可以找到对应的库,就可以获取头文件路径以及库的路径

二、add_subdirectory模式

可以通过顶层CMakeLists.txt调用子目录CMakeLists.txt的方式,这样就可以直接引用到第三方库的头文件路径和库

三、target_link_libraries模式

在库链接时直接链接第三方库

背景

DevEco Studio的native工程的C/C++部分是使用的cmake脚本来构建,开源社区上有很多C/C++三方库也是使用cmake来编译构建,这些三方库我们是否可以直接采用add_subdirectory的模式在DevEco Studio上使用?

分析

开源社区的三方库有些需要依赖其他三方库,有些不需要依赖其他三方库,通常依赖其他三方库都是通过使用find_package来引用。如果在DevEco Studio上面使用find_package,需要满足find_package的搜索条件,

有关于find_package的详细介绍可以参考cmake官网find_package介绍

一、指定find_package的搜索路径

这里可以使用CMAKE_FIND_ROOT_PATH来指定,如下图所示

图中xxx代表的就是三方库安装的路径

二、依赖库必须已存在,并且是通过install安装的

通过install安装,除了有lib和incldue文件,还有提供给find_package使用的文件,如下图所示

find_package通过这些文件来获取库的版本、库的头文件、库的名称等信息,假如没有这些文件,find_package将会找不到库。

总结

一、部分开源三方库的脚本可以在DevEco Studio上直接使用

这部分开源三方库没有其他库的依赖,可以直接使用add_subdirectory引用

二、有依赖的三方库的脚本不能在DevEco Studio上直接使用

需要配置搜索路径和提前将依赖的库都构建并安装完毕或者在顶层CMakeLists.txt中使用execute_process来调用shell命令,先把依赖库编译并安装完成

三方库引用的建议

在native工程中,三方库的使用建议都采用target_link_libraries模式来引用

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向


http://www.ppmy.cn/server/3287.html

相关文章

鸿蒙OpenHarmony【搭建Ubuntu环境】

搭建Ubuntu环境 在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516…

消息队列的确认机制和持久化选项

消息队列的确认机制: 其是为了消息传递的可靠性,所以有这个确认机制。 生产者把消息发送给队列,队列再把消息发送给消费者,发送给消费者之后,如果消费者接受到了消息,会给队列发送一个确认的信息给队列&…

[学习] linux命令大全

linux命令 前言1. 文件管理*mv* : 移动或改名文件*ls*: 显示目录中文件及其属性*cp*: 复制文件或目录*mkdir*: 创建目录文件*pwd*: 显示当前工作目录的路径*tar*: 压缩和解压缩文件*cd*: 切换目录*chmod*: 改变文件或目录权限 2:文档编辑*cat*: 在终端设备上显示文件…

标识符的命名规则

标识符的含义: 是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等 等,都是标识符。 命名规则:(硬性要求) 标识符可以包含英文字母,0-9 …

【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活

【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活 文章目录 【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活一、介绍二、联系工作三、方法3.1 对比token学习模块(CTLM)3.2 Class token对比学习3.3 标签前景激活模块 四、实验结果 Cont…

.NET JWT入坑

目录 ✨ 建立项目jwttest 1.创建TestJwtController 2.下载JWT 3.建实体类 4.添加post login 5.登录验证 6.测试没问题,写个JwtHelper 7.添加token加密类 8.测试JWT ⭐️JwtBearer 9、添加NuGet包Microsoft.AspNetCore.Authentication.JwtBearer 10、在…

C语言结构体详解

系列文章目录 第一章 C语言基础知识 第二章 C语言控制语句 第三章 C语言函数详解 第四章 C语言数组详解 第五章 C语言操作符详解 第六章 C语言指针详解 文章目录 系列文章目录 1. 结构体的声明 1.1 结构的声明 1.2 使用结构体 1.3 结构体的高级用法 结构体指针 结构…

ES6判断:当前数组对象里的所有的值是否都存在于另外一个数组里

介绍 判断当前数组里的值是否都存在于另一个数组里,这里需要用到ES6的 every()方法,及 includes()方法; every(): 用于判断数组中的每一项是否均符合条件,并返回一个布尔值,都符合返回 true,有一个不符合就返回 fals…