¿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)
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 deOFF
. - Puede hacer que una opción dependa de otras opciones con
CMakeDependentOption
-
Set
acepta tipos distintos aBOOL
, 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.