zoukankan      html  css  js  c++  java
  • 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

    参考

  • 相关阅读:
    golang html/template template.ParseFiles(filenames) 相对路径问题
    深入理解jvm jdk1,7(19)
    深入理解jvm jdk1,7(18)
    深入理解jvm jdk1,7(17)
    深入理解jvm jdk1,7(16)
    深入理解jvm jdk1,7(15)
    深入理解jvm jdk1,7(14)
    hugo 制作个人博客总结
    后台管理系统总结
    pageHelper(分页插件的使用)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3976968.html
Copyright © 2011-2022 走看看