Remplacement d’une valeur d’option par défaut (…) dans CMake à partir d’un parent CMakeLists.txt

J’essaie d’inclure plusieurs bibliothèques tierces dans mon arbre source avec des modifications minimales à leur système de génération pour faciliter la mise à niveau. Ils utilisent tous CMake, comme moi, donc dans mon propre CMakeLists.txt je peux utiliser add_subdirectory(extern/foo) pour libfoo.

Mais le foo CMakeLists.txt comstack un harnais de test, construit de la documentation, une bibliothèque partagée dont je n’ai pas besoin, etc. Les auteurs de libfoo ont eu la prévoyance de contrôler ces options via – option(FOO_BUILD_SHARED "Build libfoo shared library" ON) par exemple – ce qui signifie que je peux les configurer via la ligne de commande CMake. Mais je voudrais que cela soit désactivé par défaut et remplaçable via la ligne de commande.

J’ai essayé de faire set(FOO_BUILD_SHARED OFF) avant add_subdirectory(extern/foo) . Cela a pour effet de ne pas essayer de construire la bibliothèque partagée lors des tentatives de construction suivantes et suivantes, mais pas pendant la première, qui est celle que j’ai vraiment besoin d’accélérer.

Est-ce possible, ou dois-je conserver CMakeLists.txt forked pour ces projets?

Essayez de définir la variable dans le CACHE

 SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library") 

Remarque: Vous devez spécifier le type de variable et une description afin que CMake sache comment afficher cette entrée dans l’interface graphique.