cmake添加查找目录_CMake如何查找库路径(一)
CMake如何查找库路径(一)
如果你的代码使用了外部库(external libraries),并且你事先不知道这些库的头文件和库文件在当前平台的位置。那么适当的文件夹路径和库的搜索路径就应该被添加到编译命令中去。
CMake 通过提供find_package命令来帮助你实现这点()。
本文简要介绍如何在CMake工程中使用外部库,然后介绍如何写自己的find module。
Contents
- 1. 使用外部库
- 2. 使用CMake没有提供find module 的外部库
- 3. package finding的工作机制
- 4. 利用pkg-config
- 5. 编写find modules
- 6. 执行和缓存
- 7. 常见bugs
1.使用外部库
CMake本身提供了很多常用库的module来帮助查找该库。使用命令cmake –help-module-list
可以查看提供了哪些module,或者到module的存放路径下查看,在ubuntu Linux上的位置通常在/usr/share/cmake/Modules/下。
2.使用CMake本身没有提供module的外部库
假设你要使用LibXML++库,但是CMake没有提供该库的module。同时你发现网上有其他人提供了FindLibXML++.cmake。
此时可以下载该文件并把它丢到CMake module路径下。
有组件的包(components)
有些库不是只有一个整体组成,可能包含多个依赖库和组件。一个明显的例子是Qt 库,包含组建QtOpenGL和QtXML。为了使用这些组建,使用如下命令
find_package(Qt COMPONENTS QtOpenGL QtXml REQUIRED)
1
在包为可选项时可以省略关键词REQUIRED。这样就可以使用变量__FOUND,例如Qt_QtXml_FOUND,来检查对应组建是否被找到。
3.包查找的机制
find_package()命令会查找moudle目录下的Find .cmake文件。
首先,CMake查找${CMAKE_MODULE_PATH}里的所有文件夹。
然后, CMake查找自己的module目录/share/cmake-x.y/Modules/.
如果找不到上述文件,CMake会查找Config.cmake或者
前者叫做module mode后者叫做config module。不论是哪个mode被使用,如果一个package 被找到了,都会生成一系列的变量。
_FOUND
_INCLUDE_DIRS 或 _INCLUDES
_LIBRARIES 或_LIBS
_DEFINITIONS
所有这些变量都在Find .cmake文件里替换
cmake添加查找目录_CMake如何查找库路径(一)相关推荐
- cmake添加查找目录_cmake find_package路径详解
Motivation 经常在Linux下面写C++程序,尤其是需要集成各种第三方库的工程,肯定对find_package指令不陌生. 这是条很强大的指令.可以直接帮我们解决整个工程的依赖问题,自动把头 ...
- CMake添加不同目录文件的方法
三种使用CMake构建工程添加子目录的方法 文件目录结构 . ├── CMakeLists.txt ├── inc │ ├── ansi_def.h │ ├── ansi.h │ ├── ansi_p ...
- 查找目录下固定文件目录以及路径(自然排序)
import org.junit.Test;import java.io.File; import java.util.ArrayList; import java.util.Comparator; ...
- find linux 目录深度_linux 查找目录或文件
linux 查找目录或文件 转载:http://hi.baidu.com/corylus/blog/item/911f1a0871817ad962d98686.html --------------- ...
- linux 查找目录或文件,linux 查找目录或文件详解
查找目录:find /(查找范围) -name '查找关键字' -type d 查找文件:find /(查找范围) -name 查找关键字 -print 如果需要更进一步的了解,可以参看Linux的命 ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...
- matlab 动态目录调用程序集,C#中如何动态添加程序集查找目录
C#中如何动态添加程序集查找目录 情况如下: 现有三个程序集Main.exe, One.dll, Two.dll.其中One.dll引用了Two.dll, 并且One.dll与Two.dll部署在一起 ...
- cmake 添加头文件目录,链接动态、静态库
罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...
- c语言makecode头文件,cmake 添加头文件目录,链接动态、静态库
罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...
最新文章
- Log4j2又爆雷!2.16.0存在DOS攻击风险,升级到2.17.0可解决!
- python代码示例图形-Python使用matplotlib绘制3D图形(代码示例)
- Java 调用 Oracle 存储过程返回结果集
- mysql int类型的长度值
- Windows PsExec 0day 漏洞获免费微补丁,但仅适用于最新版本
- markdown 书写代码
- Typora 段落如何快速首行缩进两个字符
- GF(256)下的乘法
- 【Prometheus】prometheus告警配置
- python 给文件加密
- ECharts学习--调色盘
- 什么是EIP、ESP、EBP
- NoSQL数据库的基础知识
- 递归、迭代和分治(2):递归的典型例子
- Sketch教程如何实现背景局部模糊
- 解决myeclipse中 保存代码时resetting selection耗时操作
- TexturePacker命令行拉起参数
- eclipse自动排版快捷键 按了没有用 的解决办法
- 计算机科学summer program,青少年参与麻省理工学院暑期计划 (MIT Summer Program),打造微型自动驾驶赛车...
- java smtp pop3_POP3、SMTP和IMAP之间的区别和联系