江苏省城乡建设局网站,被网络运营公司骗了去哪里投诉,七里河微信网站建设,网页设计与制作解答题1、find_package命令基本介绍
在实际开发过程中#xff0c;经常不可避免的会使用到第三方开源库#xff0c;这些开源库可能是通过apt-get install 命令自动安装到系统目录#xff0c;也可能是由我们自己下载库的源码然后通过编译安装到指定目录的。
不管哪种方式安装的库文…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 iostreamusing 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 C11
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_example2.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)
-- configOpenCV_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/build3、注意
CMake本身不提供任何搜索库的便捷方法所有搜索库并给变量复制的操作必须由CMake代码完成也就是OpenCV_DIR目录下的PackageNameConfig.cmake或FindPackageName.cmake的配置文件。只不过库的作者通常会提供这两个文件以方便使用者调用。
如果这个以来保是我们自己开发的应该如何配置这个包生成这些配置文件从而能够被其他项目利用find_package命令来配置我们自定义的包呢
这就需要学习如何使用Cmake封装自己软件包。原博主暂时未更新此部分
另外find_package命令有两种工作模式这两种工作模式的不同决定了其搜包路径的不同有兴趣的可以看看下面这个链接初学者暂时学到这里有需要再补充学习“轻松搞定CMake”系列之find_package用法详解_zhanghm1995的博客-CSDN博客_find_package 其实还有好多东西可以学比如target_link_libraries这个指令可以详细了解下等等。但是作为初学者不要贪多一定要明确自己现在学的部分是服务哪个分支而不是一网下去什么鱼都想捞上来。 参考
“轻松搞定CMake”系列之find_package用法详解_zhanghm1995的博客-CSDN博客