cmake-find_package链接第三方库

文章目录

 之前我们是使用了绝对路径来链接OpenCV第三方库,但是现在很多库一般会自己写一些cmake文件提供给用户,用户可以直接使用其中的内置变量即可。使用的命令就是find_package。

基本调用形式和模块模式

cpp 复制代码
find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE]
             [REQUIRED] [[COMPONENTS] [components...]]
             [OPTIONAL_COMPONENTS components...]
             [NO_POLICY_SCOPE])

 查找并载入一个外部包的设置。查找是否成功可以通过_FOUND变量的值得到。成功查找到包后,我们就可以导入包中的目标。使用QUIET选项可以不显示查询过程中产生的信息,比如如果没有使用REQUIRED选项,即使包没有被找到,也不会显示任何信息。使用REQUIRED选项后,如果包没有被找到,就会产生一个错误信息,中断处理。

 对于必须的包组件可以在COMPONENTS选项后列出(如果使用了REQUIRED选项,也可以在REQUIRED选项后列出)。对于可选的包组件可以在OPTIONAL_COMPONENTS选项后列出。包自身定义了可用的包组件和包被认为找到的条件。

 version选项用于指定要查找的包的版本(版本格式为major.minor\[.patch\[.tweak]])。使用EXACT选项后,查找的包的版本需要和指定的版本准确匹配。如果没有使用version选项,没有给出需要的包组件列表,就会使用外部调用的相应参数(包括version的EXACT选项)。

 find_package指令有两种查找包的模式:一种是模块(Module)模式,一种是配置(Config)模式。默认情况下,首先使用模块(Module)模式,如果没有找到对应的模块(Module),就会使用配置(Config)模式。如果使用了MODULE选项,使用模块模式失败后,不会继续使用配置(Config)模式。

 模块(Module)模式下,CMake会搜索一个名为Find.cmake。首先使用CMAKE_MODULE_PATH中的路径搜索,然后搜索CMake自带的Find模块。找到Find.cmake后,CMake会读取处理这个文件。这个文件包含了要查找的包的信息。

使用方式

 这边我们还是以OpenCV第三方库来进行演示。

CMakeLists.txt

cpp 复制代码
find_package(OpenCV REQUIRED)
add_executable(lesson3_opencv main.cpp)
target_include_directories(lesson3_opencv PRIVATE ${OpenCV_INCLUDE_DIRS})
target_link_libraries(lesson3_opencv PRIVATE ${OpenCV_LIBS})

main.cpp

cpp 复制代码
#include<iostream>

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)    
{                                  
	Mat image;
	image = imread("C:/cmake_study/lesson2_opencv/1.jpeg");
	if (image.data == nullptr)
	{
		//cout <<"图片不存在" << endl;
	}
	else
	{
		imshow("meinv", image);
		waitKey(0);
	}

	system("pause");
	return 0;
}

使用这种方式需要注意我们需要把OpenCV的build文件夹指定到系统变量中。

运行结果

相关推荐
会编程的小孩2 小时前
C++ qt的安装
c++
小成202303202657 小时前
C++~07补充
开发语言·c++
hold?fish:palm8 小时前
40 二叉树的直径
c++·leetcode
解决小子8 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
lunar_coder9 小时前
【C++】如何解决智能指针的析构函数,如何实现shared_ptr的引用计数以及解决shared_ptr的循环引用
c++·1024程序员节
白白白小纯10 小时前
C++进阶.多态
c++
凯瑟琳.奥古斯特11 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
xiangyun6111 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
坤坤子吖12 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
qz_Serene12 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节