if statement - varias - cmake si otra cosa con opción
que es if else en programacion (2)
Tengo problemas para usar la option
juntos if-else
en el cmake.
project(test)
option(TESTE "isso é um teste" OFF)
if(TESTE)
message("true")
else()
message("false")
endif()
add_executable(test main.cpp)
Siempre se muestra true
incluso si desactivo la opción, ¿qué estoy haciendo mal?
Esto se debe a que el valor de la opción se almacena en el caché ( CMakeCache.txt
).
Si cambia el valor predeterminado en las CMakeLists pero el valor real ya está almacenado en la memoria caché, solo cargará el valor de la memoria caché.
Entonces, para probar la lógica en sus CMakeLists, elimine el caché cada vez que vuelva a ejecutar CMake.
Tuve un problema similar y pude resolverlo utilizando un enfoque ligeramente diferente.
Necesitaba agregar algunas banderas de compilación en caso de que cmake se invocara con una opción desde la línea de comandos (es decir, cmake -DUSE_MY_LIB=ON
). Si faltaba la opción en la invocación de cmake , quería volver al caso predeterminado que desactivaba la opción.
Me encontré con los mismos problemas, donde el valor de esta opción se almacenaba en caché entre invocaciones:
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
La solución que encontré fue eliminar la opción dentro de CMakeLists.txt después de usar la opción:
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!!
Nota: la opción Desarmar está disponible desde cmake v3.0.2