我在Windows中使用的是CMake 3.10.2。
当我使用这样的缓存设置变量时
SET(ABAQUS_MAJORVERSION 2016)
SET(ABAQUS_MAJORVERSION ${ABAQUS_MAJORVERSION} CACHE STRING "" )当我在GUI中将ABAQUS_MAJORVERSION变量更改为2014年时,此更改不会在CMake中更新。它一直在为2016年版本做准备。
请在这方面提供帮助。提前谢谢
Edit1:
这是项目结构:
|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年
解决方案:
example: SET(MAJORVERSION 2016 CACHE STRING "")您可能需要取消所有包含路径和库路径,以使新版本包含路径和库路径生效。
example: UNSET(INCLUDE_PATH CACHE)
UNSET(LIBRARY_PATH CACHE)发布于 2022-08-30 05:47:52
这可能取决于您如何使用(或意外地不使用)缓存变量。您可以同时使用相同名称的普通变量和缓存变量(这正是您正在进行的),并且仍然使用常规变量使用变量引用的文档访问它们(按照${var_name} ),对缓存变量使用$CACHE{var_name}。
这可能会让人们感到困惑,因为他们不习惯编写显式缓存表单,因为通常是下列行为生效。
在计算变量引用时,CMake首先在函数调用堆栈(如果有的话)中搜索绑定,然后返回到当前目录范围中的绑定(如果有的话)。如果找到"set“绑定,则使用它的值。如果找到了"unset“绑定,或者没有找到绑定,则CMake将搜索缓存条目。如果找到缓存项,则使用其值。否则,变量引用计算为空字符串。$CACHE{VAR}语法可用于直接缓存条目查找。
我猜这就是你被绊倒的原因。
对于那些不知道它的行为的人来说,下面的场景可能是另一个令人困惑的原因,但我不认为这是让你在这里绊倒的原因。
由于缓存条目的目的是提供用户可设置的值,因此默认情况下这不会覆盖现有的缓存条目。使用强制选项覆盖现有条目。
https://stackoverflow.com/questions/49859504
复制相似问题