这个约束会依赖包的.cmake来实现,通过find_package命令传入的COMPONENTS可以通过<PackName>_FIND_COMPONENTS这个变量来获得。举个简单的例子: # mymathConfig.cmake,假定它位于./mymath/mymath目录下 # 作用就是校验COMPONENTS是否是test,只有当COMPONENTS为空或者为test时,包mymath才会被找到 message(${mymath_FIND_...
只有在 find_package() 中指定 CONFIG、 NO_MODULE 等关键字,或者 Module 模式查找失败后才会进入到 Config 模式。 因此,find_package工作模式流程图为: 三、参数解释 3.1 Module 模式 find_package(<package>[version] [EXACT] [QUIET] [MODULE] [REQUIRED] [[COMPONENTS] [components...]] [OPTIONAL_COMPONEN...
默认情况下,find_package命令会首先尝试在MODULE_PATH中查找相应的find.cmake文件。如果指定了该参数,find_package命令将只使用CMake内置的文件搜索机制来查找库或框架。 find_package(MyLib NO_MODULE) 上述代码表示禁用find_package命令的模块模式,只使用CMake内置的文件搜索机制来查找MyLib库。 NO_DEFAULT_PATH:可...
find_package(<PackageName>[version][EXACT][QUIET][REQUIRED][[COMPONENTS][components...]][CONFIG|NO_MODULE][NO_POLICY_SCOPE][NAMESname1[name2...]][CONFIGSconfig1[config2...]][HINTSpath1[path2...]][PATHSpath1[path2...]][PATH_SUFFIXESsuffix1[suffix2...]][NO_DEFAULT_PATH][NO_PACKAG...
OPTIONAL_COMPONENTS:可选的模块,找不到也不会让cmake停止执行。 find_package原理 首先,cmake本身不提供任何搜索库的便捷方法,所有搜索库并给变量赋值的操作必须由cmake代码完成,比如FindXXX.cmake和XXXConfig.cmake。只不过,库的作者通常会提供这两个文件,以方便使用者调用。
1. Cmake FindPackage多种方式 问题引入:系统中存在多个版本的第三方库情况,怎么找到特定文件夹下的lib和头文件呢? 通常我们会使用find_package去找某个依赖的第三方库,比如如果存在多个版本的gflags,这样容易找错,引起编译问题。比如gflags是不同gcc版本编译的。
find_package命令有两种格式,基本命令格式和完整命令格式。 2.1 基本命令 find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [[COMPONENTS] [components...]] [OPTIONAL_COMPONENTS components...] [NO_POLICY_SCOPE]) ...
用户可以设置CMAKE_FIND_PACKAGE_PREFER_CONFIG变量为TRUE,让CMake优先使用Config模式。 详细的模块查找过程(翻译的官方文档) find_packge完成的参数列表 find_package(<PackageName> [version] [EXACT] [QUIET][REQUIRED] [[COMPONENTS] [components...]][OPTIONAL_COMPONENTS components...][CONFIG|NO_MODULE][NO...
find_package(catkin REQUIRED COMPONENTS nodelet)。例如,使用 Boost 时加载线程组件: 1 find_package(Boost REQUIRED COMPONENTS thread) 使用Find_Package寻找模块时,每一个模块都会产生如下变量: 1 2 3 _FOUND _INCLUDE_DIR _LIBRARYor_LIBRARIES 如果_FOUND 为真,需要把_INCLUDE_DIR 加入到INCLUDE_DIRECTORIES中...
OPTIONAL_COMPONENTS和components:可选的模块,找不到也不会让cmake停止执行。 Module模式查找顺序 Module模式下是要查找到名为Find<PackageName>.cmake的文件。 先在CMAKE_MODULE_PATH变量对应的路径中查找。如果路径为空,或者路径中查找失败,则在cmake module directory(cmake安装时的Modules目录,比如/usr/local/shar...