怎么写自己的CMakeLists.txt--二
之前写过一篇及其简单的关于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--二相关推荐
- CMakeLists.txt 详解
目录 CMakeLists.txt用例详解(WDS中的用例) CMakeLists.txt作用 生成对象库OBJECT实例(wds/libwds/common/CMakeLists.txt) 生成库s ...
- Cmake之CMakeLists.txt
我们知道makefile是在Linux编译c或者c++代码的时候的一种脚本文件,但是每一个功能都要写一个makefile文件,这样如果这个工程很大,而且相关性比较强的话,makefile的书写就会变得 ...
- 熟悉 CMake(二)—— 以一个实例说明 CMakeLists.txt 文件的编写
原文请见 cmake使用总结(转)-工程主目录CMakeList文件编写 在 Linux 下进行开发很多人选择编写 makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量 ...
- CMakeLists.txt学习记录
一.Cmake 学习地址与作用 cmake详细见:https://gitlab.kitware.com/cmake/community/-/wikis/home 是一个跨平台.开源的构建系统.它是一个 ...
- CMakeLists.txt文件如何编写?(一 基础篇)
本文首发于微信公众号「3D视觉工坊」--CMakeLists.txt文件如何写? 本文以linux平台下CMakeLists.txt文件书写方法总结. 一 开头通用模块 1.1 cmake版本要求 c ...
- cmake 编译文件 CMakeLists.txt 语法介绍与实例演练
一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 1. 指定 cm ...
- CMakeLists.txt详解
一:CMakeLists.txt文件是cmake用来生成Makefile文件需要的一个描述编译链接的规则文件 学习cmake需要提前了解gcc等编译命令,先来解释一条最简单的命令 gcc ./sour ...
- 【CMake】CMakeLists.txt的超傻瓜手把手教程(附实例源码)
新手写CMakeLists.txt简直就是实力劝退,各种命令让很多人头大,如何写一个最基础的CMakeLists.txt呢?本文从一个实例出发,教你编写的基本流程. CMakeLists.txt的基本 ...
- CMakeLists.txt从入门到精通
文章目录 前言 一 一般工程开头的一些设置案例 二 动态库与静态库的生成 2.1 动态库 2.2 静态库 三 优化选项的设置 四 生成库时的设置 五 常见依赖库的调用 5.1 OpenCV库 六 设置 ...
- 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )
文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...
最新文章
- Server Application Unavailable
- 加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法(亲测)
- cheerio的小案例
- SQL脚本文件的部署研究
- 高德面试官问我:JVM内存溢出后服务还能运行吗,我一顿操作行云流水
- [Unity] Canvas 设置为 Screen Space - Camera 时,UI 被场景物体遮挡的解决办法:设置 Canvas 的 Plane Distance 为一个较小的数
- C++之命名空间探究
- POJ NOI MATH-7651 自来水供给
- Android7 mediacodec SEI
- mysql对库授权alter_mysql 权限 alter update insert
- 浙江大学教学实习实践基地落地袋鼠云
- Imagination和浙江大学信电学院签署合作协议,校企共创大学课程新篇章
- 中国水泥工业节能减排行业投资效益及未来发展战略规划报告2021-2027年
- 【转】CAN总线与CANOPEN协议入门
- 【大数据】大数据平台技术方案及案例
- XCODE4.2 模拟器定位
- 淘宝双11大数据分析(数据准备篇)
- Artoolkit初级研究手札(2008.12.9)
- APK瘦身优化检测工具-Matrix ApkChecker 使用
- 深度USB启动盘制作工具(用u盘装系统)
热门文章
- Fiddler之Autoresponder替换(Web)
- rand生成随机数的范围_JS中生成指定范围随机数
- 本地的文件怎么放到虚拟桌面_搬新家桌面文件怎么收纳?5个便宜实用的收纳神器,你买过几个?...
- wifi协议栈_一文读懂米家部分智能硬件:米家Zigbee及WiFi模块拆解分析
- linux rsync 原理,rsync 同步原理和类别
- oracle怎样开启服务,Oracle 11g必须开启的服务及服务详细介绍
- php 使用 curl 报错,PHP CURL post数据报错 failed creating formpost data
- vue2.0 创建项目
- Java 9.while语句
- openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题