Confus au sujet de CMake en cache de réglage variable de priorité

Je suis confus au sujet de CMake en cache de variables:

  • Cas 1: CACHE + FORCE

    set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "" FORCE)
    
    • Première CMake exécuter: "myflags" apparaît dans la CMakeCache.txt fichier comme prévu.
    • Options de ligne de commande: options de ligne de commande ne remplacent pas les "myflags" - semble FORCE a une plus grande priorité que la ligne de commande -D...="..." arguments. Ce n'est pas désiré - je voudrais arguments de ligne de commande pour remplacer "myflags".

  • Cas 2: seulement CACHE

    set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "")
    
    • Première CMake exécuter: rien n'apparaît dans la CMakeCache.txt fichier. Je veux"myflags" à apparaître pour la première course.
    • Options de ligne de commande: ligne de commande ont la priorité sur "myflags".

Suis-je correct sur mes conclusions? Ou de faire "des variables par défaut" comme CMAKE_CXX_FLAGS se comporter différemment?

Est-il un moyen d'avoir "myflags" écrit dans le CMakeCache.txt fichier au cours de la première CMake run (quand CMake n'était pas déjà été exécuté dans ce dossier)?

J'aimerais ensemble "myflags" au cours de la première CMake exécuter dans le cache, puis permettre à l'utilisateur de remplacer à l'aide de la ligne de commande.

Si j'utilise FORCE, l'utilisateur ne peut pas remplacer via la ligne de commande.

Si je n'utilise pas FORCE, "myflags" n'est pas écrit dans le fichier de cache lors de la première exécution.

OriginalL'auteur Vittorio Romeo | 2014-10-01