前面介绍了一个project生成的基本的用法,这里我们继续学习如何添加第三方包的用法:
find_package(<package_name> [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [COMPONENTS <component1> <component2> ...])
<package_name> 需要查找的包名,注意大小写。
version 可选参数;指定所需的版本号
EXACT 可选参数;要求找到的包的版本与指定的版本必须完全匹配,
QUIET 可选参数; 静默模式,不会显示详细的查找信息
REQUIRED 可选参数;要求找到指定的包,如果找不到会产生错误。而如果不指定REQUIRED则CMake会继续执行,所以必须检查找到的包的版本是否和指定版本号兼容
COMPONENTS 可选字段; 指定要加载的组件,如果存在组件无法找到将会报错
MODULE 可选字段;“如果Module模式查找失败则回退到Config模式进行查找”,但是假如设定了MODULE选项,那么就只在Module模式查找,如果Module模式下查找失败并不回落到Config模式查找。
find_package(<project_name>)如何使用呢,请看如下案例:
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
# 引入头文件目录
include_directories(${OpenCV_INCLUDE_DIRS})
# 链接库文件
target_link_libraries(main ${OpenCV_LIBRARIES})
else(OpenCV_FOUND)
message(FATAL_ERROR "OpenCV library not found")
endif()
find_package()将查找的结果返回到<project_name>_FOUND中;若查找成功一般来讲则对<project_name>_INCLUDE_DIR,<project_name>_LIBRARIES进行赋值。
MODULE模式下一般默认cmake的find<project_name>.cmake,如果cmake下不存在,须手动添加自定义的find<project_name>.cmake模块。