CMakeCache.txt
可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数)。

CMakeLists.txt 中通过 set(... CACHE ...) 设置的变量
CMakeLists.txt 中的 option() 提供的选项
CMakeLists.txt 中find_package() 等find命令引入变量
命令行 cmake . -D := 定义变量

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),他们将什么都不做。

另一方面,模块查找时输出的变量(_FOUND,_INCLUDE_DIRS,_LIBRARIES)不应该被cache

[转]CMake cache的更多相关文章

  1. windows下CMake使用图文手册 Part 2

    例子2:有目录的项目 我现在有个文件夹ProjectDate,有如下文件结构 E:. │  CMakeLists.txt │ ├─include │      Date.h │ └─src       ...

  2. CMake编译linux C++

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...

  3. 转:CMake安装和使用

      CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX ...

  4. cmake 查看配置选项

    cmake 查看配置选项可以用如下命令 cmake . -LH 查看help > cmake -h    cmake version 2.6-patch 4 Usage cmake [optio ...

  5. cmake手册

    cmake手册 部分转载自:http://www.cnblogs.com/coderfenghc/tag/cmake/ CMake2.8.3 主索引 命令名称 用法 描述 命令选项 生成器 命令 属性 ...

  6. CMake 简介与使用

    cross platform make的缩写. 是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目文件.通过编写CMakeLists ...

  7. CMake 手册详解(二十)

    SirDigit CMake 手册详解(二十) CMD#51: list 列表操作命令. list(LENGTH <list> <output variable>) list( ...

  8. 【转载】CMake 两种变量原理

    原文地址:https://cslam.cn/archives/c9f565b5.html 摘要: 本文记录一下 CMake 变量的定义.原理及其使用.CMake 变量包含 Normal Variabl ...

  9. CMake相关代码片段

    目录 用于执行CMake的.bat脚本 CMakeLists.txt和.cmake中的代码片段 判断平台:32位还是64位? 判断Visual Studio版本 判断操作系统 判断是Debug还是Re ...

随机推荐

  1. LeetCode 70. Climbing Stairs爬楼梯 (C++)

    题目: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  2. jieba分词学习

    具体项目在githut里面: 应用jieba库分词 1)利用jieba分词来统计词频: 对应文本为我们队伍的介绍:jianjie.txt: 项目名称:碎片 项目描述:制作一个网站,拾起日常碎片,记录生 ...

  3. web项目部署在不同环境中需要修改配置文件的解决方法

    web项目部署中存在的配置文件问题: web项目以war包的形式,部署在tomcat中,同时项目需要访问一些其他的东东,例如访问数据库,调用别的项目的API.在开发中,这些需要访问的外部地址通常以配置 ...

  4. ABP-JavaScript API

    一.AJAX 1,ABP采用的方式 ASP.NET Boilerplate通过用abp.ajax函数包装AJAX调用来自动执行其中的一些步骤. 一个例子ajax调用: var newPerson = ...

  5. 04.基于IDEA+Spring+Maven搭建测试项目--application-context.xml配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. oracle存储过程批量插入测试数据

    前几天测试中债时,自定义资产有一级类型和二级类型,一级类型下有很多分类,每个分类下又有很多二级分类,而要做的是每种类型都要建立一个自定义资产,并做一笔交易,然后测试是否出值,于是写了一个存储过程批量插 ...

  7. Burpsuit分块传输插件绕WAF原理和技巧(转)

      0x00 原理 给服务器发送payload数据包,使得waf无法识别出payload,当apache,tomcat等web容器能正常解析其内容.如图一所示 0x02  实验环境 本机win10+x ...

  8. IntelliJ IDEA 创建Java Web项目

    1. 创建Web项目 可以先阅读 IntelliJ IDEA 的安装和使用教程 注意:IntelliJ IDEA 中 Project 和 Module 的概念及区别 创建完成后点击Import Cha ...

  9. [APIO2018] Duathlon 铁人两项

    不经过重点,考虑点双 点双,考虑圆方树 两个点s,t,中间路径上,所有点双里的点都可以经过,特别地,s,t作为割点的时候,不能往后走,也就是不能经过身后的方点 也就是,(s,t)经过树上路径上的所有圆 ...

  10. ssm框架中Controller层的junit测试_我改

    Controller测试和一般其他层的junit测试可以共用一个BaseTest 一.BaseTest如下: @RunWith(SpringJUnit4ClassRunner.class) @WebA ...