cmake-find_package链接第三方库


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

基本调用形式和模块模式

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

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

#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文件夹指定到系统变量中。
在这里插入图片描述
运行结果
在这里插入图片描述

相关推荐

  1. 【Qt问题】Qt Creator 如何

    2024-01-29 11:06:04       13 阅读
  2. python

    2024-01-29 11:06:04       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-29 11:06:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-29 11:06:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-29 11:06:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-29 11:06:04       20 阅读

热门阅读

  1. Linux 链接 GitHub 出现 Connection timed out

    2024-01-29 11:06:04       41 阅读
  2. 第十四章认识Ajax(五)

    2024-01-29 11:06:04       34 阅读
  3. 正则表达式在前端中的使用

    2024-01-29 11:06:04       36 阅读
  4. C++从零开始的打怪升级之路(day24)

    2024-01-29 11:06:04       36 阅读
  5. COMM394 Coding Literacy for Managers

    2024-01-29 11:06:04       30 阅读
  6. docker入门 问题一

    2024-01-29 11:06:04       39 阅读
  7. 状态管理与导航守卫

    2024-01-29 11:06:04       33 阅读