cmake boolean global-variables cmake-gui

¿Cuál es la diferencia entre “opción” y “establecer CACHE BOOL” para una variable CMake?



boolean global-variables (1)

¿Hay alguna diferencia entre los dos siguientes?

set(FOO true CACHE BOOL "description") option(FOO "description" ON)

Documentación: set - option

Antecedentes: incluso si he estado usando CMake por un tiempo, solo noté el comando de option hoy y, por lo tanto, siempre he estado usando set : Me preguntaba si es seguro / vale la pena reemplazar el primero con el segundo.


En tu ejemplo, no hay diferencia. Pero puede haber diferencias:

  • Option tiene un valor predeterminado de OFF .
  • Puede hacer que una opción dependa de otras opciones con CMakeDependentOption
  • Set acepta tipos distintos a BOOL , especialmente ;-lists .

Además, cuando utiliza una opción, está indicando a su usuario que puede configurarse de manera segura. La configuración de variables internas desde el exterior puede romper sutilmente el script con valores no válidos.