之前写过一篇及其简单的关于CMakeLists.txt的写法,现在重点剖析find_package的用法。

如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方法,并将他们链接到程序中。

FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE]
[[REQUIRED|COMPONENTS] [componets...]])

1) find_package()的查找路径

find_package()命令首先会在模块路径中寻找 一个事先编译好的Find.cmake文件,而且一般官方给出了很多,不需要自己编写这是查找库的一个典型方式。
具体查找路径依次为CMake:

模块模式

  • ${CMAKE_MODULE_PATH}中的所有目录。
  • 模块目录 /share/cmake-x.y/Modules/ 这称为。

配置模式

  • ~/.cmake/packages/或/usr/local/share/中的各个包目录中查找,寻找<库名字的大写>Config.cmake 或者 <库名字的小写>-config.cmake (比如库Opencv,它会查找/usr/local/share/OpenCV中的OpenCVConfig.cmake或opencv-config.cmake)。

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

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

注意大部分包的这些变量中的包名是全大写的,如 LIBFOO_FOUND ,有些包则使用包的实际大小写,如 LibFoo_FOUND

3)添加头文件与链接库文件

如果找到这个包,则可以通过在工程的顶层目录中的CMakeLists.txt 文件添加 include_directories(_INCLUDE_DIRS) 来包含库的头文件,添加target_link_libraries(源文件 _LIBRARIES)命令将源文件与库文件链接起来。

注:内容转自https://www.cnblogs.com/narjaja/p/9533199.html

转载于:https://www.cnblogs.com/chaofn/p/10806907.html

怎么写自己的CMakeLists.txt--二相关推荐

  1. CMakeLists.txt 详解

    目录 CMakeLists.txt用例详解(WDS中的用例) CMakeLists.txt作用 生成对象库OBJECT实例(wds/libwds/common/CMakeLists.txt) 生成库s ...

  2. Cmake之CMakeLists.txt

    我们知道makefile是在Linux编译c或者c++代码的时候的一种脚本文件,但是每一个功能都要写一个makefile文件,这样如果这个工程很大,而且相关性比较强的话,makefile的书写就会变得 ...

  3. 熟悉 CMake(二)—— 以一个实例说明 CMakeLists.txt 文件的编写

    原文请见 cmake使用总结(转)-工程主目录CMakeList文件编写 在 Linux 下进行开发很多人选择编写 makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量 ...

  4. CMakeLists.txt学习记录

    一.Cmake 学习地址与作用 cmake详细见:https://gitlab.kitware.com/cmake/community/-/wikis/home 是一个跨平台.开源的构建系统.它是一个 ...

  5. CMakeLists.txt文件如何编写?(一 基础篇)

    本文首发于微信公众号「3D视觉工坊」--CMakeLists.txt文件如何写? 本文以linux平台下CMakeLists.txt文件书写方法总结. 一 开头通用模块 1.1 cmake版本要求 c ...

  6. cmake 编译文件 CMakeLists.txt 语法介绍与实例演练

    一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 1. 指定 cm ...

  7. CMakeLists.txt详解

    一:CMakeLists.txt文件是cmake用来生成Makefile文件需要的一个描述编译链接的规则文件 学习cmake需要提前了解gcc等编译命令,先来解释一条最简单的命令 gcc ./sour ...

  8. 【CMake】CMakeLists.txt的超傻瓜手把手教程(附实例源码)

    新手写CMakeLists.txt简直就是实力劝退,各种命令让很多人头大,如何写一个最基础的CMakeLists.txt呢?本文从一个实例出发,教你编写的基本流程. CMakeLists.txt的基本 ...

  9. CMakeLists.txt从入门到精通

    文章目录 前言 一 一般工程开头的一些设置案例 二 动态库与静态库的生成 2.1 动态库 2.2 静态库 三 优化选项的设置 四 生成库时的设置 五 常见依赖库的调用 5.1 OpenCV库 六 设置 ...

  10. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

最新文章

  1. Server Application Unavailable
  2. 加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法(亲测)
  3. cheerio的小案例
  4. SQL脚本文件的部署研究
  5. 高德面试官问我:JVM内存溢出后服务还能运行吗,我一顿操作行云流水
  6. [Unity] Canvas 设置为 Screen Space - Camera 时,UI 被场景物体遮挡的解决办法:设置 Canvas 的 Plane Distance 为一个较小的数
  7. C++之命名空间探究
  8. POJ NOI MATH-7651 自来水供给
  9. Android7 mediacodec SEI
  10. mysql对库授权alter_mysql 权限 alter update insert
  11. 浙江大学教学实习实践基地落地袋鼠云
  12. Imagination和浙江大学信电学院签署合作协议,校企共创大学课程新篇章
  13. 中国水泥工业节能减排行业投资效益及未来发展战略规划报告2021-2027年
  14. 【转】CAN总线与CANOPEN协议入门
  15. 【大数据】大数据平台技术方案及案例
  16. XCODE4.2 模拟器定位
  17. 淘宝双11大数据分析(数据准备篇)
  18. Artoolkit初级研究手札(2008.12.9)
  19. APK瘦身优化检测工具-Matrix ApkChecker 使用
  20. 深度USB启动盘制作工具(用u盘装系统)

热门文章

  1. Fiddler之Autoresponder替换(Web)
  2. rand生成随机数的范围_JS中生成指定范围随机数
  3. 本地的文件怎么放到虚拟桌面_搬新家桌面文件怎么收纳?5个便宜实用的收纳神器,你买过几个?...
  4. wifi协议栈_一文读懂米家部分智能硬件:米家Zigbee及WiFi模块拆解分析
  5. linux rsync 原理,rsync 同步原理和类别
  6. oracle怎样开启服务,Oracle 11g必须开启的服务及服务详细介绍
  7. php 使用 curl 报错,PHP CURL post数据报错 failed creating formpost data
  8. vue2.0 创建项目
  9. Java 9.while语句
  10. openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题