If statement cmake如果有其他选项

If statement cmake如果有其他选项,if-statement,cmake,cmakelists-options,If Statement,Cmake,Cmakelists Options,我在cmake中使用选项和if-else语句时遇到问题 project(test) option(TESTE "isso é um teste" OFF) if(TESTE) message("true") else() message("false") endif() add_executable(test main.cpp) 它总是显示true,即使我推迟了选项,我做错了什么?这是因为选项的值存储在缓存中(cmakc

我在cmake中使用
选项
if-else
语句时遇到问题

project(test)

option(TESTE "isso é um teste" OFF)

if(TESTE)
  message("true")
else()
  message("false")
endif()

add_executable(test main.cpp)

它总是显示
true
,即使我推迟了选项,我做错了什么?

这是因为选项的值存储在缓存中(
cmakcache.txt

如果更改CmakeList中的默认值,但实际值已存储在缓存中,它将仅从缓存中加载该值


因此,要测试CmakeList中的逻辑,请在每次重新运行CMake之前删除缓存。

我遇到了类似的问题,并且能够使用稍微不同的方法解决它

我需要添加一些编译标志,以防使用命令行中的选项调用cmake(即
cmake-DUSE\u MY_LIB=ON
)。 如果cmake调用中缺少该选项,我想返回默认情况,即关闭该选项

我遇到了同样的问题,在调用之间缓存了此选项的值:

cmake -DUSE_MY_LIB=ON .. #invokes cmake and puts USE_MY_LIB=ON in CMake's cache.
cmake ..                 #invokes cmake with the cached option ON, instead of OFF
我找到的解决方案是在使用选项后,从CMakeLists.txt中清除选项

option(USE_MY_LIB "Use MY_LIB instead of THEIR_LIB" OFF) #OFF by default
if(USE_MY_LIB)
    #add some compilation flags
else()
    #add some other compilation flags
endif(USE_MY_LIB)
unset(USE_MY_LIB CACHE) # <---- this is the important!!
选项(使用我的库“使用我的库而不是他们的库”关闭)#默认情况下关闭
如果(使用我的库)
#添加一些编译标志
else()
#添加一些其他编译标志
endif(使用我的库)

取消设置(使用我的库缓存)#试试这个,它对我有用

unset(USE_MY_LIB CACHE)

rm CMakeCache.txt
或将其移动到垃圾桶/回收站。如果在调用CMake时设置了选项的实际值,则该选项将被覆盖。无需删除cmakcache.txt。只有当我们决定不指定实际值并且希望使用默认值时,我们才需要删除CMakeCache.txt,而在上一次运行cmake时,我们确实指定了一个不同于默认值的值。这对我不起作用,我实际上必须使用“-DUSE_MY_LIB=OFF”来执行cmake。如果我只是省略了它,那么它的行为就一直像是在@m4l490n中使用“ON”调用一样。您是否尝试过在If-else部分添加一个集合?如果显然对我不起作用,你为什么否决这个答案?它确实有效。取消设置(使用我的库缓存)@furkantokac cuz
缓存缓存
另外,请解释答案,链接相关文档。“为我工作”可以很好地得到一个肮脏的修复,但不应该是工程师停止的地方。