接前面的一二三,学习一下 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 学习笔记(四)的更多相关文章

  1. CMake学习笔记四:usb_cam的CMakeLists解析

    最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...

  2. CMake学习笔记四-CMake常用命令

    CMake常用命令 PROJECT PROJECT(projectname [CXX] [C] [Java]) 指定工程名称,并可指定工程支持的语言.支持语言列表可忽略,默认支持所有语言 SET ...

  3. cmake学习笔记(五)

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

  4. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. cmake 学习笔记(三)

    转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...

  7. cmake 学习笔记(二)

    在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...

  8. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. 【技术引擎——汇聚IT思想之间的碰撞】

    转载请注明作者和出处:http://blog.csdn.net/pearyangyang/article/details/40869825    谢谢. 这篇博客将记录我所学习的那些博客大牛,方面以后 ...

  2. 从Android中Activity之间的通信说开来[转]

    http://www.cnblogs.com/virusswb/archive/2011/08/02/2124824.html 引言 最近两个星期在研究android的应用开发,学习了android应 ...

  3. JS HTML DOM

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过 ...

  4. C#多线程及GDI(Day 23)

       又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和GDI的一些运用. 理论: 在学习多线程之前,首先要了解一下什么是进程? 进程:(关键字Process)进程是一个具有一定独立功能的程 ...

  5. Android应用开发提高篇(2)-----文本朗读TTS(TextToSpeech)

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/26/2368696.html 一.概述 TextToSpeech,就是将文本内容转换成语音,在其 ...

  6. Android 学习开发笔记《Service 与 Thread 的区别 》

    很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...

  7. shopnc b2b2c如何开启伪静态??

    shopnc b2b2c开启伪静态的方法 一. windows环境下 1.先下载isapi rewrite插件,安装,然后我们把根目录下面的htaccess.txt那么修改成.htaccess即可. ...

  8. 两台linux机器文件传输之scp

    0.写在前面:一定要注意我们是否有源文件的读权限,是否有目标文件夹的写权限!没有的话要先把权限设置好! *.设置权限的方法:切换到有权限操作文件或文件夹的用户,利用chmod命令修改权限 1.安装: ...

  9. 一个帝国cms [!--show.listpage--] css样式

    1.在分页位置加<div class="pagepage">[!--show.listpage--]</div> </div>这个标签 2.在需 ...

  10. python异常处理try,except,else,finally,raise

    先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...