首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改CMake中的缓存变量不起作用

修改CMake中的缓存变量不起作用
EN

Stack Overflow用户
提问于 2018-04-16 14:16:02
回答 1查看 1.5K关注 0票数 1

我在Windows中使用的是CMake 3.10.2。

当我使用这样的缓存设置变量时

代码语言:javascript
复制
SET(ABAQUS_MAJORVERSION 2016)
SET(ABAQUS_MAJORVERSION ${ABAQUS_MAJORVERSION} CACHE STRING "" )

当我在GUI中将ABAQUS_MAJORVERSION变量更改为2014年时,此更改不会在CMake中更新。它一直在为2016年版本做准备。

请在这方面提供帮助。提前谢谢

Edit1:

这是项目结构:

代码语言:javascript
复制
|CMakeLists.txt
|FindABAQUS.cmake
|-project1
|---source1.cpp
|---CMakeLists.txt which has SET(ABAQUS_MAJORVERSION 2016 CACHE STRING "")  
|-project2
|---source2.cpp
|---CMakeLists.txt which has SET(ABAQUS_MAJORVERSION 2016 CACHE STRING "")

我在GUI中将ABAQUS_MAJORVERSION更改为2014年。ABAQUS_MAJORVERSION变成了2014年的CMakeCache.txt文件。但是当用消息(${ABAQUS_MAJORVERSION })打印时,它显示了2016年

解决方案:

代码语言:javascript
复制
example: SET(MAJORVERSION 2016 CACHE STRING "")

您可能需要取消所有包含路径和库路径,以使新版本包含路径和库路径生效。

代码语言:javascript
复制
example: UNSET(INCLUDE_PATH CACHE)
         UNSET(LIBRARY_PATH CACHE)
EN

回答 1

Stack Overflow用户

发布于 2022-08-30 05:47:52

这可能取决于您如何使用(或意外地不使用)缓存变量。您可以同时使用相同名称的普通变量和缓存变量(这正是您正在进行的),并且仍然使用常规变量使用变量引用的文档访问它们(按照${var_name} ),对缓存变量使用$CACHE{var_name}

这可能会让人们感到困惑,因为他们不习惯编写显式缓存表单,因为通常是下列行为生效

在计算变量引用时,CMake首先在函数调用堆栈(如果有的话)中搜索绑定,然后返回到当前目录范围中的绑定(如果有的话)。如果找到"set“绑定,则使用它的值。如果找到了"unset“绑定,或者没有找到绑定,则CMake将搜索缓存条目。如果找到缓存项,则使用其值。否则,变量引用计算为空字符串。$CACHE{VAR}语法可用于直接缓存条目查找。

我猜这就是你被绊倒的原因。

对于那些不知道它的行为的人来说,下面的场景可能是另一个令人困惑的原因,但我不认为这是让你在这里绊倒的原因。

用于设置缓存变量的CMake文档

由于缓存条目的目的是提供用户可设置的值,因此默认情况下这不会覆盖现有的缓存条目。使用强制选项覆盖现有条目。

例如,-D var_name:TYPE=VALUE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49859504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档