web-dev-qa-db-fra.com

Quelle est la différence entre "option" et "set CACHE BOOL" pour une variable CMake?

Y a-t-il une différence entre les deux suivants?

set(FOO true CACHE BOOL "description")

option(FOO "description" ON)

Documentation: set - option

Contexte: même si j'utilise CMake depuis un certain temps, je n'ai remarqué que la commande option aujourd'hui et j'ai donc toujours utilisé set: je me demandais s'il est sûr/utile de remplacer le premier avec le second.

36
Antonio

Dans votre exemple, il n'y a aucune différence. Mais il peut y avoir des différences:

  • Option a une valeur par défaut de OFF.
  • Vous pouvez rendre une option dépendante d'autres options avec CMakeDependentOption
  • Set accepte des types autres que BOOL, en particulier ; - listes .

De plus, lorsque vous utilisez une option, vous indiquez à votre utilisateur qu'elle peut être définie en toute sécurité. La définition de variables internes de l'extérieur peut subtilement casser le script avec des valeurs non valides.

27
usr1234567