Installation du jeu de préfixe automatiquement chemin personnalisé si pas explicitement spécifié sur la ligne de commande
Pour certains tests internes, je voudrais l'installer préfixe par défaut dans un sous-répertoire du répertoire de construction, sauf s'il est explicitement remplacée par l'utilisateur. Je sais que l'utilisateur peut spécifier un installer préfixe:
$ cmake -DCMAKE_INSTALL_PREFIX=/foo/bar ..
Mais si l'utilisateur ne pas le préciser, il devrait être par défaut, par exemple, à ${PWD}/installed
.
La variable CMAKE_INSTALL_PREFIX
est d'ores et déjà /usr/local
, donc je ne peux pas juste vérifier pour voir si il unset/vide avant de le mettre.
Ma solution actuelle est d'ajouter un interrupteur que l'utilisateur a à invoquer pour spécifier que le CMAKE_INSTALL_PREFIX
variable est respectée:
option(ENABLE_INSTALL_PREFIX "Install build targets to system (path given by '-DCMAKE_INSTALL_PREFIX' or '${CMAKE_INSTALL_PREFIX}' if not specified)." OFF)
if ( ENABLE_INSTALL_PREFIX )
set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root")
else()
set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root" FORCE)
endif()
Mes questions sont:
(a) existe-t-il des problèmes avec l'au-delà, au-delà de la gêne de l'indicateur supplémentaire devant être transmis à CMake pour obtenir CMAKE_INSTALL_PREFIX
avoir un effet?
(b) Est-il meilleur, plus propre, plus robuste, plus idiomatiques et/ou moins ennuyeux pour atteindre le plus haut?
Grâce.
Vous devez vous connecter pour publier un commentaire.
CMake définit la variable booléenne
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
siCMAKE_INSTALL_PREFIX
n'a pas été explicitement spécifié et est initialisé à sa valeur par défaut. Vous pouvez remplacer de la manière suivante:Il y A quelques années, j'ai voulu tenter la même chose. Malheureusement, je n'ai jamais pu trouver une solution pleinement satisfaisante. Au lieu de cela, j'ai choisi d'utiliser une regex pour vérifier si
CMAKE_INSTALL_PREFIX
correspond à la valeur par défaut.E. g. sur windows j'utilise pour créer le
install
dir dans la construction-répertoire:Le plus gros problème avec cette construction est que vous pouvez spécifier manuellement que CMake doit installer dans
C:\Program Files
. Comme je distribue mon outil avec une INS-installer ce n'est pas un problème (pour moi).Vous pourriez peut-être essayer quelque chose de similaire sur Unix.
"^/usr/local"
de la correspondance; ou, mieux encore,STREQUAL "/usr/local"
au lieu d'une expression régulière correspondant.