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如何查找库路径(一)相关推荐

  1. cmake添加查找目录_cmake find_package路径详解

    Motivation 经常在Linux下面写C++程序,尤其是需要集成各种第三方库的工程,肯定对find_package指令不陌生. 这是条很强大的指令.可以直接帮我们解决整个工程的依赖问题,自动把头 ...

  2. CMake添加不同目录文件的方法

    三种使用CMake构建工程添加子目录的方法 文件目录结构 . ├── CMakeLists.txt ├── inc │ ├── ansi_def.h │ ├── ansi.h │ ├── ansi_p ...

  3. 查找目录下固定文件目录以及路径(自然排序)

    import org.junit.Test;import java.io.File; import java.util.ArrayList; import java.util.Comparator; ...

  4. find linux 目录深度_linux 查找目录或文件

    linux 查找目录或文件 转载:http://hi.baidu.com/corylus/blog/item/911f1a0871817ad962d98686.html --------------- ...

  5. linux 查找目录或文件,linux 查找目录或文件详解

    查找目录:find /(查找范围) -name '查找关键字' -type d 查找文件:find /(查找范围) -name 查找关键字 -print 如果需要更进一步的了解,可以参看Linux的命 ...

  6. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  7. matlab 动态目录调用程序集,C#中如何动态添加程序集查找目录

    C#中如何动态添加程序集查找目录 情况如下: 现有三个程序集Main.exe, One.dll, Two.dll.其中One.dll引用了Two.dll, 并且One.dll与Two.dll部署在一起 ...

  8. cmake 添加头文件目录,链接动态、静态库

    罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...

  9. c语言makecode头文件,cmake 添加头文件目录,链接动态、静态库

    罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...

最新文章

  1. 操作系统实验之作业调度算法
  2. 求int在二进制存储时1的个数(C++)
  3. 用 Visual Studio 自动生成C/C++注释(Doxygen、XML)
  4. LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导
  5. graphics | 基础绘图系统(九)——栅格图、点密度图、等高线(填充)图、三维图...
  6. 如何在Mac上访问 USB 驱动器?
  7. 微信小程序实现tab切换(可滑动切换)
  8. 机器人系统常用仿真软件工具介绍、效果与评价指标(2018年更新)
  9. LA 4490 Help Bubu
  10. 延时delay1s程序 c语言,汇编语言软件延时1s的实现方法
  11. [转]RDL(C) Report Design Step by Step 3: Mail Label
  12. 数字信号处理学习笔记[1] 离散信号 奇异信号 抽样定理
  13. html文件用wps打开,wps文件如何打开?直接打开wps文件的操作技巧
  14. Flutter环境配置基本语法如何使用库
  15. Log sum inequalit 对数和不等式的证明
  16. 矩阵的零空间和列空间
  17. 库存管理习题:第三章
  18. android抽屉风格,Android Navigation Drawer样式抽屉的使用
  19. c语言程序设计考试看什么书,(全国计算机等级考试二级C语言程序设计)应该买哪些参考书?...
  20. 关键词优化难易程度如何判断?

热门文章

  1. 中国城市码cityCode映射
  2. VTP Domain
  3. Linux如何复制文件和文件夹到另一个目录
  4. 最大可传输单元 MTU 对 UDP/TCP 包的大小限制
  5. windows如何配置mysql的环境变量
  6. Tomcat配置443端口验证微信
  7. 一个业务型算法工程师的技能清单
  8. 玩转华为ENSP模拟器系列 | 配置OSPF的DR选择示例
  9. python逐行写入文件_Python文件逐行写入
  10. 101规约单点遥信双点遥信区别