find_package的两种搜索模式都会按照一定规则从路径下搜索.cmake后缀的文件,两种模式下的.cmake文件作用都是为了给find_package命令的调用方返回有关包的信息(头文件路径、库文件路径、编译连接选项、版本信息等等),对于两种模式的进一步说明可以参看Cmake中find_package命令的搜索模式之模块模式(Module mode)和Cmake中fi...
前面介绍了find_package有两种搜索包的模式(参考find_package介绍),本篇文章介绍其中的一种:模块模式(Module Mode)。在这种模式下,当调用find_package命令查找<PackageName>包的时候,实际上会去查找一个名为Find<PackageName>.cmake的文件,这个文件的主要任务就是确定一个包是否可用,查找的结果会反映在变量<...
1.1 module模式 在这个模式下会查找一个名为find.cmake的文件,首先去CMAKE_MODULE_PATH指定的路径下去查找,然后去cmake安装提供的查找模块中查找(安装cmake时生成的一些cmake文件)。找到之后会检查版本,生成一些需要的信息。 1.2 config模式 在这个模式下会查找一个名为-config.cmake(<小写包名>-config.cmake)或...
代码地址:https://github.com/huang123aini/CMake-Note/tree/master/find_package/find_package_custom_by_module 例子目录如下: 在cmake文件下生成FindLibA.cmake 和 FindLibB.cmake文件,定义LibA库和LibB库的头文件路径&库路径。 在根目录的CMakeLists.txt文件里: #cmake最低版本cmake_minimum_required(VERS...
与find_libaray直接在指定搜索目录下搜索库不同,find_package命令可以获取更多的信息,那么它的搜索方式也是与find_libaray不一样,它有两种不同的搜索方式,因此在介绍这个命令的细节之前,先简单介绍一下find_package命令的两种搜索模式:模块模式(Module mode)和配置模式(Config mode)。
module 模式 find_package将先到 module 路径下查找Find<name>.cmake。首先它搜索${CMAKE_MODULE_PATH}中的所有路径,然后搜索/usr/share/cmake-3.5/Modules.比如find_package(Boost)搜索的文件是/usr/share/cmake-3.5/Modules/FindBoost.cmake 如果在 CMakeLists.txt 中没有下面的指令: ...
默认情况下,find_package命令会首先尝试在MODULE_PATH中查找相应的find.cmake文件。如果指定了该参数,find_package命令将只使用CMake内置的文件搜索机制来查找库或框架。 find_package(MyLib NO_MODULE) 上述代码表示禁用find_package命令的模块模式,只使用CMake内置的文件搜索机制来查找MyLib库。 NO_DEFAULT_PATH:可...
首先,find_package 有两种模式,一是Module模式,一是Config模式。 cmake本身不提供任何搜索库的便捷方法,所有搜索库并给变量赋值的操作必须由cmake代码(自己写的)完成,比如下面将要提到的FindXXX.cmake和XXXConfig.cmake。只不过,库的作者通常会提供这两个文件,以方便使用者调用。
在Module模式,CMake查找Find<PackageName>.cmake文件,首先在CMAKE_MODULE_PATH中查找,然后再CMake安装所提供的模块中查找。 用户可以设置CMAKE_FIND_PACKAGE_PREFER_CONFIG变量为TRUE,让CMake优先使用Config模式。 详细的模块查找过程(翻译的官方文档) find_packge完成的参数列表 ...
MODULE模式的查找路径 在MODULE模式下,cmake通过查找名为Find<PackageName>.cmake的文件来查找包。 首先在变量CMAKE_MODULE_PATH对应的路径中去查找 如果该变量为空或者在该路径下没有找到,则进入cmake的安装目录下查找(比如我这里是/usr/share/cmake_3.17/Module)。