Cmake入门(四)find_package
发布日期:2021-06-29 07:20:52 浏览次数:2 分类:技术文章

本文共 1218 字,大约阅读时间需要 4 分钟。

find_package是Cmake中非常重要的一条指令,用法简单,功能强大

先介绍一下它的运作流程,以用途最大的opencv为例:

1.find_package在一些目录中查找OpenCV的配置文件。

2.找到后,find_package会将头文件目录设置到${OpenCV_INCLUDE_DIRS}中,将链接库设置到${OpenCV_LIBS}中。

3.设置可执行文件的链接库和头文件目录,编译文件。

因此,我们的CMakeLists就可以这样去写:

add_executable(Main main.cpp)find_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})target_link_libraries(Main ${OpenCV_LIBS})

在了解完用法之后,自然而然出现的问题就是:find_package这个指令是如何找到Opencv的配置文件的?

两种模式:模块模式和配置模式。不管是哪种模式,都希望找到一个*.cmake文件。

模块模式是指:先从变量${CMAKE_MODULE_PATH}中的所有目录里开始找,如果没有,然后再查看它自己的模块目录 /share/cmake-x.y/Modules/ )。这称为模块模式。

配置模式是指:从~/.cmake/packages/或/usr/local/share/中的各个包目录中查找,寻找<库名字的大写>Config.cmake 或者 <库名字的小写>-config.cmake (比如库Opencv,它会查找/usr/local/share/OpenCV中的OpenCVConfig.cmake或opencv-config.cmake),这称为配置模式。

找到*.cmake以后,cmake里面一般会定义下面这些变量:

_FOUND
_INCLUDE_DIRS or
_INCLUDES
_LIBRARIES or
_LIBRARIES or
_LIBS
_DEFINITIONS

注意上面的内容,特别是or这个词。因此在CmakeLists中,“include_directories(${OpenCV_INCLUDE_DIRS})”应该是可以换成“include_directories(${OpenCV_INCLUDES})”的,同样在把库链接到可执行文件的时候,也可以把OpenCV_LIBS换成是OpenCV_LIBRARIES等等。

关于这块内容,我个人认为理解到这里就已经够了,如果还想要进一步追究其细节,一些朋友已经给出了比较好的解释,因此我也不需要复述或者照搬,直接列出地址:

转载地址:https://blog.csdn.net/zkk9527/article/details/89256873 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++中const完全详解
下一篇:Cmake入门(三)主要命令总结

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月21日 22时12分29秒