cmake 如何添加依赖库

1 说明

cmake 经常需要添加依赖库,但是不知如何确定依赖的库名称,如何编写

2 环境

ubuntu 机器

3 依赖方法

以 dbus 为例

3.1、确定库的名字

通过dpkg 命令搜索库名,如下所示,确定libdbus-1-dev 为自己需要的版本

user@ebaaa3966495:/home/sky/develop/robot$ dpkg -l |grep dbus
ii  at-spi2-core                                    2.36.0-2                             amd64        Assistive Technology Service Provider Interface (dbus core)
ii  dbus                                            1.12.16-2ubuntu2.3                   amd64        simple interprocess messaging system (daemon and utilities)
ii  dbus-user-session                               1.12.16-2ubuntu2.2                   amd64        simple interprocess messaging system (systemd --user integration)
ii  libdbus-1-3:amd64                               1.12.16-2ubuntu2.3                   amd64        simple interprocess messaging system (library)
ii  libdbus-1-dev:amd64                             1.12.16-2ubuntu2.3                   amd64        simple interprocess messaging system (development headers)
ii  libqt5dbus5:amd64                               5.12.8+dfsg-0ubuntu2.1               amd64        Qt 5 D-Bus module
ii  python3-dbus                                    1.2.16-1build1                       amd64        simple interprocess messaging system (Python 3 interface)

3.2 查看库支持cmake 的添加方式

一般camke 支持 find_package、pkg_check_modules 两种方式

user@ebaaa3966495:/home/sky/develop/robot$ dpkg -L libdbus-1-dev
/.
/usr
/usr/include
/usr/include/dbus-1.0
/usr/include/dbus-1.0/dbus
/usr/include/dbus-1.0/dbus/dbus-address.h
/usr/lib/x86_64-linux-gnu/cmake/DBus1/DBus1Config.cmake
/usr/lib/x86_64-linux-gnu/cmake/DBus1/DBus1ConfigVersion.cmake
/usr/lib/x86_64-linux-gnu/dbus-1.0
/usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h
/usr/lib/x86_64-linux-gnu/libdbus-1.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/dbus-1.pc

其中,关键词 .cmake 代表支持 find_package 方式
pkgconfig 代表支持 pkg_check_modules 方式

/usr/lib/x86_64-linux-gnu/cmake/DBus1/DBus1Config.cmake
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/dbus-1.pc

所以,dbus-1 支持2种方式

3.3 编写对应的cmake 库依赖

find_package(DBus1 REQUIRED)    # 自动查找依赖库# 最终的执行文件添加依赖
ament_target_dependencies(DBus1
)
ament_package()

3.4 延伸

同理查看glib2.0 的依赖方式

user@ebaaa3966495:/home/sky/develop/robot$ dpkg -l |grep glib
ii  gir1.2-glib-2.0:amd64                           1.64.1-1~ubuntu20.04.1               
ii  libavahi-glib1:amd64                            0.7-4ubuntu7.1                       
ii  libglib2.0-0:amd64                              2.64.6-1~ubuntu20.04.4               amd64        GLib library of C routines
ii  libglib2.0-bin                                  2.64.6-1~ubuntu20.04.4               amd64        Programs for the GLib library
ii  libglib2.0-data                                 2.64.6-1~ubuntu20.04.4               all          Common files for GLib library
ii  libglib2.0-dev:amd64                            2.64.6-1~ubuntu20.04.4               amd64        Development files for the GLib library
ii  libglib2.0-dev-bin                              2.64.6-1~ubuntu20.04.4                              amd64        Support library to use the Qualcomm MSM Interface (QMI) protocoluser@ebaaa3966495:/home/sky/develop/robot$ dpkg -L  libglib2.0-dev
/.
/usr
/usr/include
/usr/include/gio-unix-2.0
/usr/include/gio-unix-2.0/gio
...
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/gio-2.0.pc 

glib2.0 只有 pkgconfig支持,所以依赖的方式

# 其中 glib-2.0 为具体的库名
pkg_check_modules(glib REQUIRED glib-2.0)ament_target_dependencies(DBus1glib
)
ament_package()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 事务

目录 一、事务的概念 二、事务的ACID特点 1)事务的原子性 2)事务的一致性 3)事务的隔离性 (1)脏读 (2)不可重复读 (3)幻读 (4) 丢失更…

测试开发之前端篇-Web前端简介

自从九十年代初,人类创造出网页和浏览器后,Web取得了长足的发展,如今越来越多的企业级应用也选择使用Web技术来构建。 前面给大家介绍网络协议时讲到,您在阅读这篇文章时,浏览器是通过HTTP/HTTPS协议向服务器发送请求…

MyBatisPlus

一、MyBatis-Plus 1、简介 [MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P&#…

探索ES高可用:滴滴自研跨数据中心复制技术详解

Elasticsearch 是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎,其每个字段均可被索引,且能够横向扩展至数以百计的服务器存储以及处理TB级的数据,其可以在极短的时间内存储、搜索和分析大量的数据。 滴滴ES发展至今&#xf…

Telink泰凌微TLSR8258蓝牙开发笔记(一)

一、开发环境搭建 1.1、软件开发环境: 1.1.1、开发的IDE: IDE下载链接 1.1.2、烧录工具 DBT下载地址 1.1.3、蓝牙SDK 蓝牙SDK下载地址 1.2、硬件开发环境 8258开发板烧录工具一套 二、运行例程,并使能打印调试信息功能 File-->Impo…

c#学习记录-文件操作

文件操作/文件夹操作 文件夹会创建在\bin\Debug\net6.0 namespace _23_文件操作 {internal class Program{static void Main(string[] args){-------------------文件操作File--------------//复制方法1FileInfo myFile new FileInfo("E:\\VScodes\\第四季-高级编程\\2…

状态模式(C++)

定义 允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。 应用场景 在软件构建过程中,某些对象的状态如果改变,其行为也会随之,而发生变化,比如文档处于只读状态,其支持的行为和读写…

xshell新建文件传输失败-使用sftp如何上传及下载数据

问题描述 我在使用xshell时,点击操作栏中的新建文件传输,报错为:要继续使用此程序,您必须应用最新的更新或使用新版本,然后就给我跳到了sftp界面,界面上显示的是当前目录,我要下载数据到本地。 …

C++中动态数组的使用

C中动态数组的使用 假设要在应用程序中存储医院的病历,程序员将无法知道需要处理的病历数上限。就小医院而言,为稳妥起见,程序员可对上限做合理的假设。在这种情况下,程序员将预留大量的内存,进而降低系统的性能。 为…

仅使用 CSS 创建打字机动画效果

创建打字机效果比您想象的要容易。虽然实现这种效果的最常见方法是使用 JavaScript,但我们也可以使用纯 CSS 来创建我们的打字机动画。 在本文中,我们将了解如何仅使用 CSS 创建打字机动画效果。它简单、漂亮、容易。我们还将看看使用 CSS 与 JavaScrip…

全球互联网步入IPv6时代,IPv4逐渐告别历史舞台

随着互联网技术的飞速发展,全球互联网正迎来IPv6与IPv4并存转型阶段。IPv6, 新一代互联网协议,以其更大的地址空间和更高的效率正逐渐取代IPv4成为互联网的主导。 全球互联网开始全面实施IPv6这意味着IPv4时代正在逐渐走向尾声。IPv4与IPv6为互联网协议版…

【Spring Boot】了解Spring Boot 的日志文件

目录 一、日志的作用 二、日志文件的简单使用 1、Spring Boot中的默认日志 2、自定义日志打印 三、日志级别 1、日志级别分类 2、日志级别的设置 3、日志持久化 四、基于LomBok的日志输出 1、安装Lombok插件 2、使用Lombok添加日志 3、使用Lombok添加getter和setter…

Java关键字:final解析

目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常&#xff0…

C++STL简介

1.STL简介 1.1.STL的概念 STL(standard template libaray即:“标准模板库”)是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 1.2.STL的版本 原始版本:Alexander Stepanov、Meng …

SAM 大模型Colab快速上手【Segment Anything Model】

Google Colab 是一个基于云的 Jupyter 笔记本环境,允许您通过浏览器编写、运行和共享 Python 代码。 它就像 Google 文档,但用于代码。 通过免费版本的 Google Colab,你可以获得带有约 16GPU VRAM 的 Nvidia Tesla T4 GPU,这对于…

centos手动离线安装php,nginx

1、CentOS 7上安装并配置Nginx https://www.cnblogs.com/xujiecnblogs/p/16843984.html /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -s stop #关闭 /usr/local/nginx/sbin/nginx -s reload #重启 增加h…

解决K8S集群设置污点后,污点不生效,下发应用的问题

问题:在集群中部署了三个daemonset,一开始加了容忍Toleration,后边去掉Toleration后,还是一直往边缘节点上部署应用,非常离谱 解决:删掉Toleration后,需要把annotations一起删掉,因为…

区块链媒体发稿:区块链媒体宣发常见问题解析

据统计,由于区块链应用和虚拟货币的兴起,越来越多媒体对区块链领域开展报导,特别是世界各国媒体宣发全是热火朝天。但是,随着推卸责任媒体宣发的五花八门,让很多人因而上当受骗,乃至伤害一大笔资产。身为投…

打破雇佣思想 云畅科技CIO曾颖博士浅析零雇工模式

作者简介 INTRO 曾 颖 工商管理博士 云畅科技高级合伙人、CIO 产业咨询&企业数字化转型落地专家 2018年,“零雇工”企业组织创新2018全球创新创业教育高峰论坛在西安举行,我当时作为上海沐新众创空间的导师和分会场“企业家如何创建零雇工…

6.pip简介,第三方库的安装

引言 使用过Visual Studio的小伙伴可能对npm不陌生,没错,pip与npm的功能是一样的。 首先要知道,Python这门语言拥有着丰富的标准库以及先辈们开发的各种功能强大的第三方库。而今天我们主要学习的呢就是关于Python中的包管理工具。它是Pytho…