DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

接前面的一二三,学习一下 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

参考

posted on   DoubleLi  阅读(323)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2013-09-17 用ffmpeg把H264数据流解码成YUV420P
2013-09-17 在linux下读取bmp文件头的完整代码。
2013-09-17 在linux下实现用ffmpeg把YUV420帧保存成图片
2013-09-17 如何用ATL创建ActiveX控件
2013-09-17 用ATL和MFC来创建ActiveX控件
2013-09-17 列出我所知道的图像处理库
2013-09-17 jpeglib使用指南
点击右上角即可分享
微信分享提示