I am with problem to use option
together if-else
in the cmake.
project(test)
option(TESTE "isso é um teste" OFF)
if(TESTE)
message("true")
else()
message("false")
endif()
add_executable(test main.cpp)
It always display true
even if I put OFF at the option, what am I doing wrong?
That's because the value of the option is stored in the cache (
CMakeCache.txt
).If you change the default value in the CMakeLists but the actual value is already stored in the cache, it will just load the value from the cache.
So to test the logic in your CMakeLists, delete the cache each time before re-running CMake.
I had a similar problem and was able to solve it using a slightly different approach.
I needed some compilation flags to be added in case cmake was invoked with an option from the command line (i.e
cmake -DUSE_MY_LIB=ON
). If the option was missing in the cmake invocation I wanted to go back to default case which was turning the option off.I ran into the same issues, where the value for this option was being cached between invocations:
The solution I found was clearing the option from within CMakeLists.txt after the option was used:
Note: The
unset
option is available since cmake v3.0.2