CMake缓存是什么?

12

CMake缓存是什么?

我正在阅读cmake手册,偶尔会遇到术语 cmake缓存。例如这段话:

-C <initial-cache> 预加载一个脚本来填充缓存

在空的构建树中第一次运行cmake时,它会创建一个CMakeCache.txt文件,并将其用于项目的可定制设置。此选项可用于指定一个文件,在通过项目的cmake列表文件的第一次通过之前加载缓存条目。加载的条目优先于项目的默认值。给定文件应该是一个CMake脚本,其中包含使用CACHE选项的SET命令,而不是缓存格式文件。

这个缓存是什么?
是否有不同类型的缓存?
或者更好的问题是:缓存通常是什么?

此外,缓存的重要性是什么?
处理缓存时是否有某些注意事项?
例如,当您重新启动计算机时,缓存是否会重置?


CMake在构建文件夹中生成一个CMakeCache.txt文件。https://dev59.com/Q1gQ5IYBdhLWcg3w1nVA - drescherjm
"CMake缓存?" "你想知道它是什么,Neo吗?... CMake缓存无处不在。它就在我们周围。即使现在..." - einpoklum
1个回答

12

CMake 缓存是指一组持久化变量 - 存储在构建目录中名为 CMakeCache.txt 的文件中。这些包括用户可配置选项,定义项目的某些行为。例如,在构建目录中运行 cmake -D CMAKE_BUILD_TYPE=Release .,并发现该变量保存在 CMakeCache.txt 中。

CMake 只有一种类型的缓存。在第一次配置构建后,它会被创建并保存到 CMakeCache.txt 中,并且在正常使用中不会重置自己。


所以CMake缓存不应该用于存储包检测数据,因为如果用户安装了其他软件包,然后重新运行CMake,这可能导致过期的值,对吗? - Max Barraclough
我并不完全理解这个问题。我相信包检测信息实际上是存储在CMake缓存中的。如果您在CMake脚本中有一个find_package语句,并且找到了该软件包,则这些变量将保存在缓存中。 - Raul Laasner
我的真正问题是:如果我运行CMake,然后安装一个可选的依赖项,然后重新运行CMake,它会检测到包已经安装了吗?还是我需要手动删除缓存? - Max Barraclough
1
我相信是的,CMake会每次运行find_package命令,并在安装新软件包时更改缓存。 - Raul Laasner
如果我想构建Debug类型的项目,那么执行cmake -D CMAKE_BUILD_TYPE=Debug .命令是否可行?如果我想同时构建Debug和Release类型的项目,那么执行cmake -D CMAKE_BUILD_TYPE=Debug, Release .命令是否可行? - bim
cmake -D CMAKE_BUILD_TYPE=Debug . 可以正常工作,但是同时指定 Debug 和 Release 选项是不起作用的。你需要分别构建它们。 - Raul Laasner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接