find_package 可以被用来在系统中自动查找配置构建工程所需的程序库。CMake 自带的模块文件里有大半是对各种常见开源库的 find_package 支持,支持库的种类非常多。
原理
find_package 可以根据一些预先定义好的变量[1]去搜索库文件,就是去搜索一个叫 *Find
[1] 这些变量有关目标库的设置,比如 xxx_ROOT,xxx_INCLUDEDIR 之类的,你可以修改这些变量去帮助 find_package 找到库
[2] 这些变量就是 find_package 的搜索结果,比如 xxx_FOUND,xxx_LIBRARY_DIRS 等
具体可以查看CMake_modules里对应库的说明
搜索路径
cmake会先在${CMAKE_MODULE_PATH}和
格式
find_package(<package> [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])
- QUIET ,如果找不到包,将不会显示消息
- REQUIRED ,如果找不到包,将停止处理并显示错误消息
- COMPONENTS ,或REQUIRED之后,列出项目所需组件列表
操作
如何寻找支持的库
- 在 CMake_modules 寻找支持的库
- 在对应库的官方文档里可能有相关cmake配置
官方文档里可能有更完整的配置
如何导入库
#前面可能需要设置一些其他变量
#比如要导入xxx库
find_package(xxx)
#包含头文件,find_package把头文件地址保存进了xxx_INCLUDE_DIRS中
include_directories(${xxx_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} files)
#连接库文件
target_link_libraries(your_target_name ${xxx_LIBRARIES})
具体操作查看官方文档
参考文献cmake
文档信息
- 本文作者:wzx
- 本文链接:https://masterwangzx.com/2018/10/31/cmake-find-package/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)