文档章节

(小记)cmake:五

follitude
 follitude
发布于 2017/05/25 14:35
字数 459
阅读 5
收藏 0

学习find_package的 config 模式及package configure文件相关知识

find_package 的 config 模式

当CMakeLists.txt中使用find_package命令时,首先启用的是 module 模式:

  • 按照 CMAKE_MODULE_PATH 路径和cmake的安装路径去搜索finder文件 Find<package>.cmake

如果finder未找到,则开始 config 模式:

  • 将在下列路径下查找 配置 文件 <name>Config.cmake 或 <lower-case-name>-config.cmake

<prefix>/

(W)

<prefix>/(cmake|CMake)/

(W)

<prefix>/<name>*/

(W)

<prefix>/<name>*/(cmake|CMake)/

(W)

<prefix>/(share|lib)/cmake/<name>*/

(U)

<prefix>/(share|lib)/<name>*/

(U)

<prefix>/(share|lib)/<name>*/(cmake|CMake)/

(U)

  • find_package 参数及规则见manual

<name>Config.cmake

该文件至少需提供头文件路径和库文件信息。比如 ApiExtractorConfig.cmake 在Windows下一个例子:

# - try to find APIEXTRACTOR
#  APIEXTRACTOR_INCLUDE_DIR   - Directories to include to use APIEXTRACTOR
#  APIEXTRACTOR_LIBRARIES     - Files to link against to use APIEXTRACTOR

SET(APIEXTRACTOR_INCLUDE_DIR "D:/shiboken/dist/include/apiextractor")
if(MSVC)
    SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.lib")
elseif(WIN32)
    SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/bin/apiextractor.dll")
else()
    SET(APIEXTRACTOR_LIBRARY "D:/shiboken/dist/lib/apiextractor.dll")
endif()

该文件是通过 configure_file 机制生成的,我们看看 ApiExtractorConfig.cmake.in 文件:

SET(APIEXTRACTOR_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/apiextractor@apiextractor_SUFFIX@")
if(MSVC)
    SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@.lib")
elseif(WIN32)
    SET(APIEXTRACTOR_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
else()
    SET(APIEXTRACTOR_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@apiextractor@apiextractor_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
endif()

对应的命令(变量的定义略过)

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ApiExtractorConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/ApiExtractorConfig.cmake" @ONLY)

<name>ConfigVersion.cmake

该文件用来比对版本是否匹配,看看ApiExtractorConfigVersion.cmake.in 的内容:

set(PACKAGE_VERSION @apiextractor_VERSION@)

if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
   set(PACKAGE_VERSION_COMPATIBLE FALSE)
else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
   set(PACKAGE_VERSION_COMPATIBLE TRUE)
   if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
      set(PACKAGE_VERSION_EXACT TRUE)
   endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )

一般提供设置下面的变量

PACKAGE_VERSION

完整的版本字符串

PACKAGE_VERSION_EXACT

如果完全匹配为真

PACKAGE_VERSION_COMPATIBLE

如果兼容为真

PACKAGE_VERSION_UNSUITABLE

如果不可用为真

find_package进而根据这些设置

<package>_VERSION

full provided version string

<package>_VERSION_MAJOR

major version if provided, else 0

<package>_VERSION_MINOR

minor version if provided, else 0

<package>_VERSION_PATCH

patch version if provided, else 0

<package>_VERSION_TWEAK

tweak version if provided, else 0

参考

 

本文转载自:http://blog.csdn.net/dbzhang800/article/details/6341029

共有 人打赏支持
follitude
粉丝 6
博文 118
码字总数 4956
作品 0
浦东
私信 提问
cmake学习笔记(五)

在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西。但靠这些知识还是不能看懂PySide使用CMakeLists文件,接下来继续学习...

晨曦之光
2012/05/08
250
0
使用cmake编译C语言项目时使用第三方库

关于cmake的安装,CMakeLists.txt的语法规则,CMakeLists.txt的各种配置选项等复杂而专业的知识,限于本人能力,这里不再说明 演示使用glibc2.0库 一 项目目录 laolang@laolang-Lenovo-G470:...

小代码2016
2015/08/12
0
6
cmake 学习笔记(一)

最大的Qt4程序群(KDE4)采用cmake作为构建系统 Qt4的python绑定(pyside)采用了cmake作为构建系统 开源的图像处理库 opencv 采用cmake 作为构建系统 ... 看来不学习一下cmake是不行了,一点一点...

晨曦之光
2012/05/08
726
0
MYSQL 源码安装 root 用户

题记: MYSQL 也安装了很多次,每次找上次安装的脚本,都是无头苍蝇,遂记此文。 此文参考了 http://www.cnblogs.com/fly1988happy/archive/2011/11/21/2257682.html 文中每个步骤都是边装边...

tacg
2015/06/25
0
0
安装MySQL5.5时常见错误--缺失make

首先我这是一台CentOS release 6.2 (Final),新安装的系统,没有任何软件及库文件。安装mysql5.5之前,先需要大概了解一下,需要注意的信息,mysql5.5的安装与其它版本不同的是编译安装时,需...

SANSOM
2013/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Centos 7 JDK、Tomcat9 安装并配置

Centos 7 JDK、Tomcat9 安装并配置 2017年04月17日 22:44:36 我是一座离岛 阅读数:5707更多 个人分类: webCentOS 版权声明:博主原创文章,转载请注明出处。 https://blog.csdn.net/ngl272...

linjin200
13分钟前
1
0
Spring boot遇到的问题

2018年12月11日 Ver:2.0.2升级到2.1.1文件上传遇到问题 The method setMaxFileSize(String) from the type MultipartConfigFactory is deprecated 是不是就不用设置了?...

夏碌冬藏
14分钟前
1
0
Spark sql操作Hive

这里说的是最简便的方法,通过Spark sql直接操作hive。前提是hive-site.xml等配置文件已经在Spark集群配置好。 val logger = LoggerFactory.getLogger(SevsSpark4.getClass) def main(args:...

守望者之父
15分钟前
1
0
炫酷粒子表白 | 听说女神都想谈恋爱了!

最近听女神说想谈恋爱了,✧(≖ ◡ ≖) 嘿嘿,一定不能放过这个机会,给她来个不一样的表白。 那么咱们就一起来把这个粒子系统玩出花来吧 演示地址: https://es2049.studio/work-show/text...

我的卡
16分钟前
2
0
Spark Streaming管理Kafka偏移量

前言 为了让Spark Streaming消费kafka的数据不丢数据,可以创建Kafka Direct DStream,由Spark Streaming自己管理offset,并不是存到zookeeper。启用Spark Streaming的 checkpoints是存储偏移...

架构师springboot
18分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部