cmake if else with option

时间:2014-03-18 14:00:11

标签: if-statement cmake options

我在cmake中使用option if-else时遇到问题。

project(test)

option(TESTE "isso é um teste" OFF)

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

add_executable(test main.cpp)

它总是显示true即使我选择了OFF,我做错了什么?

3 个答案:

答案 0 :(得分:27)

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

如果更改了CMakeLists中的默认值,但实际值已存储在缓存中,则只会从缓存中加载该值。

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

答案 1 :(得分:6)

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

如果使用命令行中的选项(即cmake -DUSE_MY_LIB=ON)调用 cmake ,我需要添加一些编译标志。 如果 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!!

注意: 自cmake v3.0.2

以来,unset选项可用

答案 2 :(得分:2)

尝试一下,它对我有用

unset(USE_MY_LIB CACHE CACHE)