gpt4 book ai didi

cmake - 什么是CMakeCache.txt,为什么它会覆盖我的变量

转载 作者:行者123 更新时间:2023-12-03 20:02:51 36 4
gpt4 key购买 nike

当我在编辑CMakeLists.txt之后使用cmake时,某些变量将不会被加载。如果我用CACHE STRING定义了某些内容,则不允许我更改它而不强制它或删除缓存。

那么为什么我们有了这个CMakeCache.txt文件。甚至需要吗?

最佳答案

是的,这确实是必需的。 CMake在构建期间由于CMakeList文件更改而重新运行自身时或在make rebuild_cache时使用高速缓存。它还会在正常配置运行开始时加载缓存。

使用CMake的标准流程如下:


在一个空的二进制目录中运行CMake以生成项目和缓存的初始版本
在CMake GUI或ccmake或类似版本中,检查由初始运行设置的缓存变量,并根据需要对其进行修改。
重新运行CMake(如果您的UI提供,则仅运行其配置步骤)。
重复步骤2和3,直到对配置满意为止
如果您仅在3中运行Configure,请运行Generate


现在,您已经根据自己的喜好配置了一个构建系统。

为使以上各项起作用,缓存中的用户更改必须优先于CMakeLists.txt中指定的默认缓存值。否则,从点2开始的用户更改将在下一次配置时丢失,并再次由项目指定的默认值覆盖。

这就是为什么CMake命令set(var ... CACHE)不会修改缓存变量var(如果已存在)的原因。通常,您的项目应将设置缓存视为提供用户可调整的默认值。

如果您确实需要在项目中覆盖用户选择,则可以:


FORCE添加到set命令,或
使用不带setCACHE设置非缓存变量。非缓存变量优先于同名的缓存变量。

关于cmake - 什么是CMakeCache.txt,为什么它会覆盖我的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160117/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com