find_package()的查找*.cmake的顺序

Posted 邱明成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find_package()的查找*.cmake的顺序相关的知识,希望对你有一定的参考价值。

1、 find_package(<Name>)命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式。具体查找路径依次为CMake: 
变量${CMAKE_MODULE_PATH}中的所有目录。如果没有,然后再查看它自己的模块目录 /share/cmake-x.y/Modules/ ($CMAKE_ROOT的具体值可以通过CMake中message命令输出)。这称为模块模式。

2、 如果没找到这样的文件,find_package()会在~/.cmake/packages//usr/local/share/中的各个包目录中查找,寻找<库名字的大写>Config.cmake 或者 <库名字的小写>-config.cmake (比如库Opencv,它会查找/usr/local/share/OpenCV中的OpenCVConfig.cmakeopencv-config.cmake)。**这称为配置模式。

**不管使用哪一种模式,只要找到*.cmake*.cmake里面都会定义下面这些变量:

<NAME>_FOUND
<NAME>_INCLUDE_DIRS or <NAME>_INCLUDES
<NAME>_LIBRARIES or <NAME>_LIBRARIES or <NAME>_LIBS
<NAME>_DEFINITIONS


注:FIND_PACKAGE(Protobuf)//调用外部自定义cmake模块,简单理解就是外面已经有一个写好cmake脚本(和CmakeLists.txt语法一样),你想在某个CMakeLists.txt中直接调用。

以上是关于find_package()的查找*.cmake的顺序的主要内容,如果未能解决你的问题,请参考以下文章

CMake中find_package的使用

Cmake中find_package命令的搜索模式之模块模式(Module mode)

cmake:Windows编译支持HTTPS的curl库及find_package查找CURL时需要注意的问题

ubuntu find_package 找不到 qt5

Cmake命令之find_package介绍

cmake find_package脚本只能在Linux上失败