cmake学习笔记(五)
在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西。但靠这些知识还是不能看懂PySide使用CMakeLists文件,接下来继续学习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://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:find_package
http://www.cmake.org/Wiki/CMake:How_to_create_a_ProjectConfig.cmake_file
from:http://blog.csdn.net/dbzhang800/article/details/6341029
cmake学习笔记(五)的更多相关文章
- CMake学习笔记五-依赖库添加
# # 项目名称 # SET(WIS_PROJECT_NAME EXAMPLE) # dependencies SET(DEPENDENCIES #依赖第三方库 ) #Qt模块 SET(QT_MODU ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- cmake 学习笔记(三)
转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...
- cmake 学习笔记(二)
在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- 在不同Activity之间传递数据的四种常用方法
在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4. ...
- poj2356 Find a multiple(抽屉原理|鸽巢原理)
/* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...
- PKU POJ 1006 Biorhythms (中国剩余定理)
中国剩余定理 x = ai (mod mi) ai和mi是一组数,mi两两互质,求x 令Mi = m1*m2*~mk 其中,mi不包含在内. 因为mi两两互质,所以存在x和y, st M ...
- ThinkPHP第十七天(隐藏index.php和简短路径配置)
1.路由设置,让路径中不显示index.php方法: 第一步:在apache中的httpd.conf中查找: LoadModule rewrite_module modules/mod_rewrite ...
- 无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试。
无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试. a>.DCOM配置里的属性灰色不可用的解决方法, 1>.管理工具->组件服务 ...
- win7 64位 Xsheel
Xsheel5安装后,找不到.dll文件,系统支持不好,不用 Xshell4有时提示 1152:Error 就使用 链接:http://pan.baidu.com/s/1c1s42Y0 密码:098x ...
- 织梦dedecms|文章页通用标签
当前位置: {dede:field name='position'/}上一页: {dede:prenext get='pre'/}下一页: {dede:prenext get='next'/}收 ...
- codeforces 616E. Sum of Remainders 数学
题目链接 给两个数n, m. 求n%1+n%2+.......+n%m的值. 首先, n%i = n-n/i*i, 那么原式转化为n*m-sigma(i:1 to m)(n/i*i). 然后我们可以发 ...
- LED板上芯片(COB)封装流程
LED 板上芯片(Chip On Board,COB)封装流程是,首先在基底表面用导热环氧树脂(一般用掺银颗粒的环氧树脂)覆盖硅片安放点, 然后将硅片 间接安放正在基底表面,热处理至硅片牢固地固定正在 ...
- UV印刷
UV就是在一张印上你想要的图案上面过上一层油,主要是增加产品亮度,保护产品表面,其硬度高,耐腐蚀摩擦,不易出现划痕等,有些复膜产品现改为上UV,能达到环保要求,但UV产品不易粘接,有些只能通过局部UV ...