cmake之链接外部动态库

2023-05-16

cmake不再使你在构建项目时郁闷地想自杀了。  --佚名KDE开发者

1.写在开头

  1. 有两种方式,一种是cmake自己内置的find_package,另一种是使用pkg-config。

2. find-package

cmake_minimum_required(VERSION 2.8)

find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    message(${OpenCV_INCLUDE_DIRS})
    message(${OpenCV_LIBRARIES})
endif(OpenCV_FOUND)

使用这个命令时,cmake程序会在/usr/share/cmake-x.x/Modules/目录下,寻找FindOpenCV.cmake文件,通过这个文件,读取所有关于OpenCV库的安装信息。

奇怪的是,我的这个目录下,并没有FindOpenCV.cmake文件,但强大的find_package命令还是可以找到opencv的安装信息,怎么回事?

是因为,我安装的版本是cuda版,每次要寻找OpenCV时,它会先找到cuda,然后在cuda的配置文件里面,包含了OpenCV的安装信息。所以,我/usr/share/cmake-x.x/Modules/目录下,有一个FindCUDA.cmake文件。

另外,可以在CMakeLists.txt文件中,添加find_package的寻找路径。

set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} <your path>)

是FindXXX.cmake文件的路径

3. pkg-config

cmake_minimum_required(VERSION 2.8)

find_package(PkgConfig)
pkg_check_modules(OpenCV opencv>=3.1.0)
if(OpenCV_FOUND)
    message(${OpenCV_INCLUDE_DIRS})
    message(${OpenCV_LIBRARIES})
endif(OpenCV_FOUND)

它寻找PKG_CONFIG_PATH路径下的xxx.pc文件,获取库的相关信息。

pkg-config --variable pc_path pkg-config

终端输入这个命令,可以查看PKG_CONFIG_PATH具体的值。这是我的值:

/usr/local/lib/x86_64-linux-gnu/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/share/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/pkgconfig
/usr/share/pkgconfig

不知道为什么,基于debian的ubuntu总喜欢搞一个x86_64-linux-gnu文件夹。

对于编译安装了多个版本OpenCV库情况,只需要把编译库时生成的opencv.pc文件拷贝到这些目录下,就可以,或者添加opencv.pc路径到PKG_CONFIG_PATH变量。

我把最新版本的opencv.pc文件拷贝到/usr/lib/x86_64-linux-gnu/pkgconfig路径下。

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

cmake之链接外部动态库 的相关文章

  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • 如何使用Cmake使用框架?

    对于 Macos 我想链接到一些框架 在 Windows 中 我想链接到一些库 比如OpenGL Framework 如何使用cmake表达这个需求 您可以尝试以下代码 target link libraries
  • CMake:如何在多个文件上运行自定义命令来生成源文件?

    我有以下情况 我想编译一些Scheme文件Gambit https github com gambit gambit成可执行文件 为此 我使用 gambit 将所有计划文件翻译 生成为 C 和目标文件 然后将其编译并链接为可执行文件 假设我
  • CMake:不支持的 GNU 版本 - 不支持高于 8 的 gcc 版本

    在降级我的 GCC 之前 我想知道是否有一种方法可以确定我的机器中的哪些程序 框架或依赖项将被破坏 以及是否有更好的方法来安装 openpose 例如 更改 CMake 中的某些内容 有没有办法可以解决这个问题 而无需更改我的系统 GCC
  • Jenkins + Cmake + JIRA = 多个相互依赖项目的 CI?

    我们的系统中有许多小项目在 Linux 上运行 Slackware 7 11 正在慢慢迁移到 RHEL 6 0 大约 50 100 个应用程序和 15 20 个库 我们几乎所有的应用程序都使用我们的一个或多个库 我们的源树看起来像这样 ap
  • grpc找不到protobuf库

    我检查了 grpc 安装并完成了构建和安装 现在当我尝试 find package gRPC CONFIG REQUIRED I get CMake Error at CMakeLists txt 15 find package Found
  • CMake 占位符如何工作?

    在 CMake 的支持库中 您将看到如下所示的命令定义 set CMAKE ASM ASM DIALECT COMPILE OBJECT
  • 设置 CMake OBJECT 库的输出目录

    在我的 CMake 文件中 我指定了一个对象库 add library core OBJECT sourcefiles 我在共享库中进一步引用了这组目标文件 add library sharedlib SHARED
  • 使用 target_link_libraries 以绝对路径作为库路径进行平台库名称扩展?

    在 CMake 中使用 target link libraries 仅使用库名称 例如 target link library myProject SomeLibrary 将根据平台将 SomeLibrary 扩展为 SomeLibrary
  • clang-tidy - 忽略第三方标头代码

    我正在为我的项目使用 CMake 并且我想向项目引入 clang tidy 检查 我用于此目的CMAKE CXX CLANG TIDY and clang tidy用于检查设置的文件 我想在 CI 中使用警告作为错误来可靠地检查提交是否引入
  • 如何在 Windows 中使用 cmake 构建和链接 google benchmark

    我正在尝试构建 google benchmark 并使用 cmake 将其与我的库一起使用 我已经成功构建了 google benchmark 并使用 cmake 成功运行了所有测试 不幸的是 我无法使用 cmake 或 cl 将其与 Wi
  • cmake MSYS Makefiles 生成器丢失

    我通过 pacman 安装了 cmake 3 2 3 当我尝试从 msys64 shell 中使用它时出现错误 cmake G MSYS Makefiles CMake Error Could not create named genera
  • pybind11:如何将 c++ 和 python 代码打包到一个包中?

    我正在尝试使用 CMake 和 pybind 11 将现有的 Python 代码和新的 C 11 代码打包在一起 我认为我缺少一些可以添加到 CMake 脚本中的简单内容 但在任何地方都找不到它 pybind11 示例只有 C 代码和没有P
  • 在 Android Studio 中使用预构建的共享库

    我需要在我的 android 项目中使用自定义的预构建共享库 在独立 ndk 上构建为 libdynamic so 我在路径 src main 中创建了一个文件夹 jniLibs 然后在其中创建了 4 个文件夹 即 armeabi arme
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • cmake:设置多个项目以及它们之间的依赖关系

    我需要帮助为 C 项目编写一个好的 CMakeLists txt 我寻找答案 但我发现了什么 这是我的项目结构 MainProj ProjLib include proj lib h src proj lib cc CMakeLists t
  • CMake - 作为构建过程的一部分运行测试并将标准输出捕获到文件

    我们有几个单元测试 我们希望将其作为构建过程的一部分运行 为了实现这一目标 我有一个帮助程序脚本 它创建一个运行测试的自定义命令 如果成功 则创建一个文件 test name passed 然后我添加一个自定义目标 test name ru
  • CMake Xcode生成器创建了一个无法构建的项目

    我有一个使用 CMake 构建系统的 C 项目 我使用 MacBook Pro 进行开发 因此当我使用终端时 一切都非常顺利 我可以构建我的项目 然而 今天我发现我可以在使用 CMake 生成器创建相应的项目后使用 Xcode gt cma
  • 是否可以使用 gold 链接器编译和链接 Clang/LLVM?

    我正在为 LLVM Clang 编写自定义通道 重新编译往往需要一段时间并使用大量内存 我听说 gold 链接器 1 比标准 ld 链接器花费更少的时间并且 2 使用更少的内存 有没有办法将标志传递到 LLVM Clang 构建过程并更改为
  • 如何从 CMake 构建目标仅生成目标文件 (*.o)?

    我正在尝试使用 CMake 构建一个对象文件 但我似乎无法让 CMake 构建除完整可执行文件之外的其他内容 我基本上是在寻找以下编译的结果 结果将加载到 VxWorks 目标上并然后链接 CC CFLAGS INC DIRS c src

随机推荐

  • 如何获取shell函数的返回值及shell命令的返回值?

    1 获取shell函数调用的返回值 xff1a bin sh info cat jlb sh res 61 96 info 96 echo 34 state 34 echo 34 res 34 res 说明 xff1a res 61 96
  • Linux下TCP最大连接数受限问题

    一 文件数限制修改 1 用户级别 查看Linux系统用户最大打开文件限制 xff1a ulimit n 1024 1 vi etc security limits conf mysql soft nofile 10240 mysql har
  • Linux使用curl访问https站点时报错汇总

    每一种客户端在处理https的连接时都会使用不同的证书库 IE浏览器和FireFox浏览器都可以在本浏览器的控制面板中找到证书管理器 在证书管理器中可以自由添加 删除根证书 而Linux 的curl 使用的证书库在文件 etc pki tl
  • pkcs1与pkcs8格式RSA私钥互相转换

    1 PKCS1私钥生成 openssl genrsa out private key 1024 private key文件内容如下 xff1a BEGIN RSA PRIVATE KEY MIICXQIBAAKBgQDREk3uy4x9i4
  • spring mvc 配置总结

    1 spring mvc的配置文件 2 Spring Mvc 3 1 之后如何配置messageConverters 3 Spring aop 原理及各种应用场景
  • 【Latex】中插入图片(Excel和Visio绘制)不失真的方法

    一开始用Latex写论文不懂 xff0c 用Visio和Excel绘制图片之后直接用截图工具截取后存为 png格式之后就往Latex中插入 xff0c 结果图片严重失真 xff0c 后来问过师兄后得到大致的过程 xff0c 摸索后成功 xf
  • SSL证书类型

    按适用域名数量分类有 xff1a 通配符型SSL证书 万能型SSL证书 单域名SSL证书 多域名SSL证书 通配型SSL证书 xff1a 也称为泛域名证书 xff0c 可以同时适用于多个子域名 xff0c 可以匹配 domain com 万
  • Maven的pom.xml介绍

    6 1 简介 pom xml文件是 Maven进行工作的主要配置文件 在这个文件中我们可以配置 Maven项目的 groupId artifactId和 version等 Maven项目必须的元素 xff1b 可以配置 Maven项目需要使
  • 使用简单的wcf文件实现上传,下载文件到服务器

    wcf是微软开发出的用户数据通信的app接口 xff0c 在 net framework3 0中与wpf xff0c wf一同集成 xff0c 是 net框架的一部分 具体请参见点击打开链接 本文主要讲述了使用wcf服务契约来进行文件或者数
  • mysql添加用户和权限

    用户管理 mysql gt use mysql 查看 mysql gt select host user password from user 创建 mysql gt create user 用户名 IDENTIFIED by 39 用户密
  • MacBook Pro(M1)安装mysql

    1 下载 网址 xff1a mysql com 2 选择社区版本 3 MySQL Community Server 版本 兼容性说明 xff1a 适配 macOS 10 15 版本 xff0c 但上面有说明 xff0c 可运用于 Big S
  • MySQL进阶-监控、高可用

    MySQL监控 1 常见的监控方式 一般来说 xff0c 常见的监控方式主要有如下三种 xff1a 监控方式特点优点缺点工具 脚本自己编写工具或脚本 xff0c 适合初期机器很少的生产环境在企业初期可以快速满足监控需求后期部署和维护成本大商
  • Druid+Commons DBUtils基本使用

    Druid 1 jar包下载 xff1a https github com alibaba druid releases 2 导入jar包 2 1创建lib文件夹 xff0c 复制粘贴进去 2 2 2 3 3 创建配置文件 文件名称 xff
  • MAC安装maven及每次启动需要刷新bash_profile问题

    1 下载 网址 xff1a https maven apache org download cgi 2 解压安装 选择一个目录 示例 xff1a Users i18 apache maven 3 8 1 3 配置变量 vim span cl
  • win10解压安装mysql方法及遇见的问题(缺少MSVCR120.dll文件、服务无法启动)

    WIN10系统MYSQL的下载与安装详细教程 第一步 xff1a 下载 MySQL 下载地址 xff1a https dev mysql com downloads mysql 5 1 html downloads 具体过程如下 xff1a
  • 基于select函数实现的tcp简单服务器

    select 实现 tcp demo 回忆TCP的连接过程selectselect 的封装tcp类的封装程序流程 程序cli cpp 客户端建立连接SelectSvr hpp 服务器的头文件Tcpsvr hppmain cpp 主函数mak
  • 【odroid-xu3】 ODROID-XU3软件环境搭建记录

    原文链接 xff1a http blog csdn net aganlengzi article details 50036951 1 操作系统环境准备 我用的是Ubuntu12 04 xff0c 但是建议用更高的版本 按照android官
  • D435i相机首次开发与踩坑记录

    D435i相机首次开发与踩坑记录 介绍 配置完D435i相机的开发环境后开始尝试研究官方例程 xff0c 试着运行一些demo初入intel相机 开始的时候也是很头疼 xff0c 不知道如何下手 xff0c 看了众多博客后稍微有了一些眉目
  • 单片机串口收发字符数据的类型

    今天在用51单片机进行串口收发数据的时候遇到了这样一个问题 xff0c 上位机给单片机的字符数据是什么类型的 xff0c 单片机又是怎样存储的 xff1f 串口中断如下 UART中断服务函数 void InterruptUART inter
  • cmake之链接外部动态库

    cmake不再使你在构建项目时郁闷地想自杀了 xff0d xff0d 佚名KDE开发者 xff11 xff0e 写在开头 有两种方式 xff0c 一种是cmake自己内置的find package 另一种是使用pkg config 2 fi