cmake 学习笔记(四)
接前面的一二三,学习一下 CMakeCache.txt 相关的东西。
CMakeCache.txt
可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数)。
- CMakeLists.txt 中通过 set(... CACHE ...) 设置的变量
- CMakeLists.txt 中的 option() 提供的选项
- CMakeLists.txt 中find_package() 等find命令引入变量
命令行 cmake . -D <var>:<type>=<value> 定义变量
cmake 第一次运行时将生成 CMakeCache.txt 文件,我们可以通过ccmake或cmake-gui或make edit_cache对其进行编辑。
对应于命令行 -D 定义变量,-U 用来删除变量(支持globbing_expr),比如 cmake -U/*QT/* 将删除所有名字中带有QT的cache项。
变量与Cache
cmake 的变量系统远比第一眼看上去复杂:
- 有些变量被cache,有些则不被cache
- 被cache的变量
- 有的不能通过ccmake等进行编辑(internal)
- 有的(带有描述和类型)可以被编辑(external)
- 有的只在ccmake的 advanced 模式出现
看个例子:
- SET(var1 13)
- 变量 var1 被设置成 13
- 如果 var1 在cache中已经存在,该命令不会overwrite cache中的值
- SET(var1 13 ... CACHE ...)
- 如果cache存在该变量,使用cache中变量
- 如果cache中不存在,将该值写入cache
- SET(var1 13 ... CACHE ... FORCE)
- 不论cache中是否存在,始终使用该值
要习惯用帮助
cmake --help-command SET
find_xxx
为了避免每次运行都要进行头文件和库文件的探测,以及考虑到允许用户通过ccmake设置头文件路径和库文件的重要性,这些东西必须进行cache。
- find_path 和 find_library 会自动cache他们的变量,如果变量已经存在且是一个有效值(即不是 -NOTFOUND 或 undefined),他们将什么都不做。
另一方面,模块查找时输出的变量(<name>_FOUND,<name>_INCLUDE_DIRS,<name>_LIBRARIES)不应该被cache
参考
cmake 学习笔记(四)的更多相关文章
- CMake学习笔记四:usb_cam的CMakeLists解析
最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...
- CMake学习笔记四-CMake常用命令
CMake常用命令 PROJECT PROJECT(projectname [CXX] [C] [Java]) 指定工程名称,并可指定工程支持的语言.支持语言列表可忽略,默认支持所有语言 SET ...
- cmake学习笔记(五)
在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- cmake 学习笔记(三)
转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...
- cmake 学习笔记(二)
在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
随机推荐
- Java基础:容器
转载请注明出处:jiq•钦's technical Blog 一.Collection:存放独立元素 Collection中的接口都是可选操作,事实上现类 并不一定实现了其全部接口,这是为了防止&qu ...
- 简单使用SimpleCursorAdapter
http://my.oschina.net/javaeye/blog/14846 果使用Sqlite,建议和ContentProvider结合使用.这样数据库的生命周期就不用自己管了.然后,如果要在比 ...
- CSS换行2
1.可以使用强制换行符号<br />换行.如果在一个文章里可以在文章需要换行的地方加入<br />即可实现自动换行-常说的小换行,与换行前没有间隔.实例如下图 换行说明图无间隔 ...
- 【LINUX】SHELL syntax error:unexpected end of file
解决思路: DOS下文件和Linux下文件格式差异问题导致的. DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A.而Unix下的文本文件是以\n作为断行标志的,表示成十六进制 ...
- GBK转utf-8,宽字符转窄字符
//GBK转UTF8 string CAppString::GBKToUTF8(const string & strGBK) { string strOutUTF8 = "" ...
- jquery初学笔记
官方网站:http://jquery.com/ 一个简单的JQuery实例: <!DOCTYPE html> <html lang="en" xmlns=&quo ...
- yii教程
http://www.yiichina.com/doc 官网是很好的参考文档
- HTML+CSS笔记 CSS进阶
文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...
- app 转caf 音频 代码
afconvert /Users/xiaoye/Downloads/cat.caf /Users/xiaoye/Downloads/cat1.caf -d ima4 -f caff -v;
- The introduction to Web.config of ASP.NET #Reprinted#
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...