CMake学习笔记:搜索第三方库及头文件路径 find_package()命令

这篇具有很好参考价值的文章主要介绍了CMake学习笔记:搜索第三方库及头文件路径 find_package()命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、find_package命令基本介绍

在实际开发过程中,经常不可避免的会使用到第三方开源库,这些开源库可能是通过apt-get install 命令自动安装到系统目录,也可能是由我们自己下载库的源码然后通过编译安装到指定目录的。

不管哪种方式安装的库文件,如果我们需要在自己的项目中使用这些库,首先面临的第一个问题就是如何找到这些库。也就是说,根据我们的需要找到指定本版的库头文件包含路径、链接库路径等,从而能够满足我们开发项目的编译链接需要。

CMake提供了find_package()命令用来查找以来包,理想情况下,一句find_package()命令就能把一整个依赖包的的头文件包含路径、库路径、库名字、版本号等情况都获取到,后续只管用就好了。但实际使用过程肯呢个会出现这样那样的问题,因此需要我们对find_package这个强大的命令有个大概的理解。

2、一个使用find_package命令的例子

例子说明:用OpenCV库举例子,示范如何通过find_package命令找到OpenCV库并配置,从而能够在我们自己的项目中调用OpenCV库,实现特定的功能。

下面的代码主要实现了利用OpenCV载入一张图片并进行显示。

opencv_test.cpp

#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"

#include <iostream>


using namespace std;
using namespace cv;

int main(){
    Mat image;
    image = imread("../flower.jpg");

    if(!image.data){
        cout <<"No image data\n";

        return -1;
    }

    namedWindow("Display Image", WINDOW_AUTOSIZE);
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)

project(opencv_example LANGUAGES CXX)

# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 搜索OpenCV的头文件路径、库文件路径等信息
# REQUIRED 表示一定要找到包,否则立即停掉整个CMake
find_package(OpenCV  REQUIRED) 

# 打印
message(STATUS "    config: ${OpenCV_DIR}")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    include: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "    libraries: ${OpenCV_LIBS}")

# 可以不用指定关于Opencv的头文件、库的搜索路径
#include_directories(${OpenCV_INCLUDE_DIRS})
#link_directories(${OpenCV_DIR})

# 生成可执行二进制文件
add_executable(opencv_example main.cpp)

# Link your application with Opencv libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})

2.1 编译运行

在源码路径打开终端,执行

mkdir build
cd bild
cmake ..
make 

在源码路径下放置一张图片并命名为flower.jpg,运行:

./opencv_example

2.2 编译输出与分析

执行cmak ..命令时输出为:

-- The CXX compiler identification is GNU 11.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found version "4.5.0") 
--     config(OpenCV_DIR): /usr/local/lib/cmake/opencv4
--     version: 4.5.0
--     include: /usr/local/include/opencv4
--     libraries: opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lrj/work/opencv_example/build

3、注意

CMake本身不提供任何搜索库的便捷方法,所有搜索库并给变量复制的操作必须由CMake代码完成,也就是OpenCV_DIR目录下的<PackageName>Config.cmake或Find<PackageName>.cmake的配置文件。只不过库的作者通常会提供这两个文件,以方便使用者调用。

如果这个以来保是我们自己开发的,应该如何配置这个包生成这些配置文件,从而能够被其他项目利用find_package命令来配置我们自定义的包呢?

这就需要学习如何使用Cmake封装自己软件包。(原博主暂时未更新此部分)

另外find_package命令有两种工作模式,这两种工作模式的不同决定了其搜包路径的不同,有兴趣的可以看看下面这个链接,初学者暂时学到这里,有需要再补充学习:“轻松搞定CMake”系列之find_package用法详解_zhanghm1995的博客-CSDN博客_find_package

其实还有好多东西可以学,比如target_link_libraries这个指令可以详细了解下等等。但是作为初学者,不要贪多,一定要明确自己现在学的部分是服务哪个分支,而不是一网下去什么鱼都想捞上来。

参考:

“轻松搞定CMake”系列之find_package用法详解_zhanghm1995的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-456642.html

到了这里,关于CMake学习笔记:搜索第三方库及头文件路径 find_package()命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 现代CMake高级教程 - 第 5 章:链接第三方库

    双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 案例 使用 tbb 库 main.cpp 直接链接 tbb CMakeLists.txt 直接链接 tbb 的缺点: 如果这样直接指定 tbb,CMake 会让链接器在系统的库目录里查找 tbb,他会找到 /usr/lib/libtbb.so 这个系统自带的,但这对于没有一个固定库安装位置的

    2024年02月02日
    浏览(31)
  • Ubuntu中使用vscode+cmake引用第三方库进行编译调试

    在自己的项目中引用openCV和Eigen库。 opencv和Eigen库的编译安装参见上一篇文章https://blog.csdn.net/qq_41816368/article/details/130090823?spm=1001.2014.3001.5502#t4 其他的第三方库放在工作空间的thirdparty文件夹,项目编译时一起编译,不提前安装。 首先新建一个文件夹作为工作空间 在创建Thir

    2023年04月25日
    浏览(37)
  • 【kali学习笔记】利用第三方服务对目标进行被动信息收集

    1、概念: 信息收集的方式分为两种:被动收集和主动收集。被动信息收集方式是指利用第三方的服务对目标进行访问了解,比如Google搜索。主动信息收集方式:通过直接访问、扫描网站,这种流量流经网站的行为,比如:nmap扫描端口。 2、被动信息收集的目的: 通过公开渠

    2024年02月10日
    浏览(26)
  • ESP32工程中CMake使用及加入第三方SDK库文件

            本文中使用的是乐鑫官方推出的 ESP-IDF v5.1 对 ESP32S3 设备开发,并非是Arduino、Micro-python等第三方工具开发。在ESP-IDF框架中,乐鑫官方已经将 CMake 和 Ninja 编译构建工具 集成到了ESP-IDF中。         ESP-IDF 即乐鑫物联网开发框架,可为在 Windows、Linux 和 macOS 系统平台

    2024年02月20日
    浏览(29)
  • python学习-第三方库的引入

    目录 前言: 第三方库的三种引入方式:  1、使用pip+cmd引入第三方库  2、使用pycharm引入第三方库  3、使用轮子.whl文件进行离线安装 扩展知识-永久更改第三方库下载源         在Python语言的库中,分为Python标准库和Python的第三方库。python的标准库是随着pyhon安装的时候

    2024年02月05日
    浏览(45)
  • Docker学习路线6:使用第三方镜像

    第三方镜像是在Docker Hub或其他容器注册表上提供的预构建Docker容器镜像。这些镜像由个人或组织创建和维护,可以作为您容器化应用程序的起点。 Docker Hub 是最大和最受欢迎的容器镜像注册表,包含官方和社区维护的镜像。您可以根据名称或要使用的技术搜索镜像。 例如:

    2024年02月16日
    浏览(32)
  • 【笔记】H5跳转手机应用商店(指定应用页/第三方应用商店)

    华为: appmarket://details?id=PackageName vivo:: vivoMarket://details?id=PackageName 应用宝 直接下载: tmast://appdetails?pname=PackageName 百度 搜狗 网页: http://market.android.com/details?id=PackageName 金立 网页: http://m.appgionee.com/marketdetail?id=PackageName 小米: mimarket://details?id=PackageName 联想: http://marke

    2024年02月12日
    浏览(34)
  • 【Android 12 AOSP学习】Android内置第三方apk到系统

    这篇文章将介绍如何在Android系统中内置第三方apk 编译好的Android源码 Android apk文件:也就是安卓应用安装包 (1)在源码 packages/apps 目录下以我们需要内置的APK名字来创建一个新的文件夹 以 qqmusic.apk 为例,在 Android_12_AOSP/packages/apps 目录下新建qqmusic文件夹 (2)将 qqmusic.apk 放入

    2024年02月02日
    浏览(34)
  • UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

    完全没接触过C++的插件和DLL,因为MediaPipe需要自己创建插件并编译DLL库,所以把该踩的坑都踩了一遍,几天终于把DLL加载给弄明白了.创作不易,还请点个赞! 参考资料: 封装自己的项目为dll给其他用户使用_哔哩哔哩_bilibili 【UE5】UE项目中静态库还没整明白吧,动态链接库又来了_哔

    2023年04月21日
    浏览(28)
  • 学习记录654@搞定python安装TA-Lib第三方库

    TA-Lib是量化投资比较重要的一个包,用于生成技术指标,比如均线,MACD,RSI等,安装还是遇到点小问题。 首先我去 https://pypi.org/project/TA-Lib/ 官方的第三方库网址倒找这个包,然后按照他的提示进行下载,是的,使用的是很暴力的方式: pip install TA-Lib 很遗憾,报错: ERROR:

    2024年02月04日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包