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. Log4j2又爆雷!2.16.0存在DOS攻击风险,升级到2.17.0可解决!
  2. python代码示例图形-Python使用matplotlib绘制3D图形(代码示例)
  3. Java 调用 Oracle 存储过程返回结果集
  4. mysql int类型的长度值
  5. Windows PsExec 0day 漏洞获免费微补丁,但仅适用于最新版本
  6. markdown 书写代码
  7. Typora 段落如何快速首行缩进两个字符
  8. GF(256)下的乘法
  9. 【Prometheus】prometheus告警配置
  10. python 给文件加密
  11. ECharts学习--调色盘
  12. 什么是EIP、ESP、EBP
  13. NoSQL数据库的基础知识
  14. 递归、迭代和分治(2):递归的典型例子
  15. Sketch教程如何实现背景局部模糊
  16. 解决myeclipse中 保存代码时resetting selection耗时操作
  17. TexturePacker命令行拉起参数
  18. eclipse自动排版快捷键 按了没有用 的解决办法
  19. 计算机科学summer program,青少年参与麻省理工学院暑期计划 (MIT Summer Program),打造微型自动驾驶赛车...
  20. java smtp pop3_POP3、SMTP和IMAP之间的区别和联系

热门文章

  1. Android开发者编写自己的API接口(上)
  2. vue阻止浏览器默认事件
  3. 矩阵范数,向量范数,奇异值有什么用?
  4. 纯JS判断iPhone准确机型,iPhone6~iPhoneXs Max
  5. 虚拟机上网与linux kali2018和windows虚拟机ip地址修改的方法(保姆级图文)
  6. Python画出时钟
  7. 深度学习笔记(学习中)
  8. GL.iNet MT1300 双频千兆无线路由器
  9. 木马编程入门_逆向入门分析实战(一)
  10. ASP.NET/C# 控制器Controller的深入理解