visual varias then sentencia que programacion elseif else condiciones if-statement cmake options

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