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 laCMakeCache.txt
fichier comme prévu. - Options de ligne de commande: options de ligne de commande ne remplacent pas les
"myflags"
- sembleFORCE
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"
.
- Première CMake exécuter:
-
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"
.
- Première CMake exécuter: rien n'apparaît dans la
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
Vous devez vous connecter pour publier un commentaire.
Ceci est cohérent avec le comportement est expliqué dans la la documentation:
CMAKE_CXX_FLAGS
est présent dans le cache, même sansset(CMAKE_CXX_FLAGS ... CACHE ...)
dans votre CMakeLists.txt parce queCMAKE_CXX_FLAGS
variable est déjà en cours de drapeaux de compilation de l'initialisation.CMAKE_CXX_FLAGS
à la première exécution, puis en permettant à l'utilisateur de les remplacer.) Dois-je vérifier si la variable est vide et le remplir dans ce cas?Que penser de l'utilisation de variables personnalisées de CXX drapeaux (par exemple
MYFLAGS
) et la fusion de ce SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MYFLAGS}"`?Il semble fonctionner. Merci!!!!
OriginalL'auteur Peter