使用Cmake封装API接口成Package方法

2023-10-31

本文是个人探究API封装成Package以让他人像使用OpeCV,PCL等第三方库那样方便时所总结的经验。

一、CmakeLists.txt的编写

1、基本工程实现

cmake_minimum_required(VERSION x.x) #最小Cmake版本要求

projiect() #工程名称

find_package() #引入第三方库

add_library() #编译代码为库文件,SHARED标志可以指定为动态库

2、特殊实现

target_include_directories(ImagePreprocess PUBLIC

$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>

$<INSTALL_INTERFACE:include>)

设置目标库要链接的头文件路径,无论是API本身还是引用API的消费者都需要使用该目录下的头文件,所以使用PUBLIC标志;避免被使用时API的头文件路径不受编译路径影响,所以要分别设置BUILD_INTERFACE与INSTALL_INTERFACE。

target_link_libraries(ImagePreprocess PRIVATE vpi PUBLIC opencv_core)

设置API需要链接的库,其中vpi只由API自身使用,消费者不会直接使用vpi的相关函数或者变量,所以vpi使用PRIVATE标志;其中opencv_core被API使用,并且API的消费者也会使用其中的变量类型,所以采用PUBLIC标志。

install(TARGETS ImagePreprocess

DESTINATION ImagePreprocess/lib

EXPORT ImagePreprocessTargets)

安装库文件,较平时不同的是要加入EXPORT

install(FILES include/ImagePreprocess.h

DESTINATION ImagePreprocess/include)

安装头文件

install(EXPORT ImagePreprocessTargets

FILE ImagePreprocessTargets.cmake

DESTINATION ImagePreprocess/lib/cmake/ImagePreprocess)

生成ImagePreprocessTargets.cmake文件,并且安装在指定目录

include(CMakePackageConfigHelpers)

一个用于生成重定位配置文件的工具

configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in

ImagePreprocessConfig.cmake

INSTALL_DESTINATION "ImagePreprocess/lib/cmake/ImagePreprocess"

NO_SET_AND_CHECK_MACRO

NO_CHECK_REQUIRED_COMPONENTS_MACRO)

生成一个可以重定向的ImagePreprocessConfig.cmake,生成的ImagePreprocessConfig.cmake在build目录下

install(FILES

${CMAKE_CURRENT_BINARY_DIR}/ImagePreprocessConfig.cmake

DESTINATION ImagePreprocess/lib/cmake/ImagePreprocess

)

安装ImagePreprocessConfig.cmake到指定目录

二、Config.cmake.in编写

@PACKAGE_INIT@

默认写法

include(CMakeFindDependencyMacro)
find_dependency(OpenCV)

API消费者也需要使用的库的依赖传递

include("${CMAKE_CURRENT_LIST_DIR}/ImagePreprocessTargets.cmake")

常规写法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Cmake封装API接口成Package方法 的相关文章

随机推荐

  • 隐私计算分类

    在大数据时代中 海量的数据的交叉计算和人工智能的发展为各行各业提供了更好的支持 但这些被使用的数据往往包含用户的隐私数据 或企业 机构的内部数据 这些数据由于数据安全和隐私的考虑 往往是不对外开发 例如政府数据由于政策保密性完全不能对外公布
  • 【H.264/AVC视频编解码技术详解】二十、H.264的去块滤波算法

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • 两种办法解决 make: Warning: File “xxx“ has modification time yyy s in the future 的问题

    一 引言 最近在工作中 在本地将代码文件上传到远端服务器 在远端服务器进行 make 编译的时候 会报这样的错 make Warning File xxx has modification time yyy s in the future
  • 2021年7月19日--7月25日(调试Osgearth33+抄写osg/osgearth源码,共20小时,合计829小时,剩9171小时)

    继续按计划进行 其他随意 完成情况 除抄写osg osgearth源码最后计算外 周一 1 整合gis引擎 1小时 2 网络视频教程1小时 合计2小时 周二 18 40 19 20 osgEarth33调试一节 40分钟 19 36 20
  • 人生,天命,自己

    前提摘要 我现在刚刚毕业 正在找工作 疯狂投简历 目前还没有消息 但是我最近有一个想法 在这个想法之上正在研究一个关于文档关联的新东西 简单来说就是利用相关性算法 然后 使用py代码来实现文档关联 为什么我会公开说出我的研究 或者是我发表关
  • [C++]高效使用c++11--理解auto类型推导

    推导类型 1 理解类型推导 auto的推导方式和template是一样的 所以我们首先来介绍template是如何推导类型的 template
  • pip:python -m pip install --upgrade pip 解决办法

    在使用 pip 安装 Flask 的时候 命令行报错 You are using pip version 9 0 1 however version 21 2 4 is available You should consider upgra
  • Qt - 高级网络操作 HTTP/FTP

    欢迎转载 请注明出处 https blog csdn net qq 39453936 spm 1010 2135 3001 5343 原文链接 https blog csdn net qq 39453936 article details
  • Redis的5大类型

    Redis的5大类型 Redis是单进程 单线程 单实例并发很多的请求 如何变得很快的呢 Redis默认有16个库 redis cli raw进行当前编码的匹配 底层是按照字节存储的 二进制安全 Redis的5大类型 1 String 包含
  • 再见Xshell,这款免费开源的终端工具真香~

    作为一名后端开发 在日常工作中肯定是要和服务器打交道的 自然也就需要使用终端工具 在 Windows 系统的电脑上我一直是使用 Xshell 以前还挺好用的 后面这款工具竟然把 ftp 功能给剥离出去了 单独搞了个 Xftp 这让我使用起来
  • 4.1-支持向量机

    文章目录 一 铰链损失 Hinge loss 二 核方法 Kernel Method 2 1 径向基函数核 Radial Basis Function Kernel 2 2 Sigmoid Kernel 三 支持向量机相关方法 SVM re
  • PyTorch学习日志_20201030_ Autograd 包

    日期 2020 10 30 主题 PyTorch入门 内容 根据PyTorch官方教程文档 学习PyTorch中所有神经网络的核心 Autograd 包的基础操作 主要与张量相关 根据自己的理解和试验 为代码添加少量注解 具体代码如下 fr
  • TCP往返传输时间(RTT)的估计

    TCP往返传输时间 RTT 的估计1 TCP传输往返时间是指发送端从发送TCP包开始到接收到它的立即响应所耗费的传输时间 当接收端和发送端同时支持TCP时戳选项时 发送端记录在TCP包头选项内的时戳可以被接收端随响应反射回来 发送端就可以利
  • Windows下OMNET++的安装和各种架构调试心得

    以下所述的为windows平台下OMNET 集成在MSVC6 0环境下的使用方法 一 OMNET的安装 1 到OMNET官方网站下载windows平台下的安装程序 当前版本为omnetpp 3 2p1 win32 下载Ghostscript
  • smart检测指标详解

    一 SMART概述 要说Linux用户最不愿意看到的事情 莫过于在毫无警告的情况下发现硬盘崩溃了 诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据 但为预防硬件崩溃造成数据丢失所花费的代价却是相当可观的 特别是在用户从来没有提前考虑
  • linux下socket编程处理TCP粘包

    一 数据接收时会出现以下几种情况 一次接收到了客户端发送过来的一个完整的数据包 一次接收到了客户端发送过来的 N 个数据包 由于每个包的长度不定 无法将各个数据包拆开 一次接收到了一个或者 N 个数据包 下一个数据包的一部分 还是很悲剧 无
  • Redis内存数据库

    Redis内存数据库 NoSQL数据库简介 Redis简介 Redis应用场景 windows下安装和使用Redis 在linux下安装redis Redis数据可视化RedisDesktopManager Redis配置 Redis 数据
  • 无人机(总结的一个报告)

    无人机系统是配备了必要的数据处理单元 传感器 自动控制和通信系统 并且能够自动执行任务的系统 脑 能源 传感器 执行机构 无人系统分为 区域 无人空中系统 UAS 无人地面系统 UGS 无人海上系统 UMS 那么军用无人机系统未来的发展从哪
  • 如何用Jenkins和Perforce Helix Core搭建CI/CD管道

    Jenkins是常用的CI CD管道支持工具 在这一篇文章中 我们将详细讨论Jenkins对于CI CD管道的重要性 以及如何用Jenkins和Perforce Helix Core搭建CI CD管道 什么是Jenkins搭建的CI CD管
  • 使用Cmake封装API接口成Package方法

    本文是个人探究API封装成Package以让他人像使用OpeCV PCL等第三方库那样方便时所总结的经验 一 CmakeLists txt的编写 1 基本工程实现 cmake minimum required VERSION x x 最小C