web-dev-qa-db-fra.com

Le support de CMake "make uninstall"?

J'essaie de trouver une solution libre Sudo- pour permettre à mes utilisateurs d'installer et de désinstaller mon application. En utilisant

set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/opt/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/")
SET(CMAKE_INSTALL_RPATH "$ENV{HOME}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/")

Je peux diriger les fichiers vers le répertoire personnel de l'utilisateur, et

make install

fonctionne bien. Avec référence à Quel est le contraire de 'make install', c'est-à-dire comment désinstaller une bibliothèque sous Linux? Je n'ai trouvé aucune idée, qui est Sudo- libre et qui ne l'est pas complexe pour une personne non-administrateur système.

  1. Est de toute façon make uninstall soutenu par CMake?

  2. Ma désinstallation est assez simple: tous les fichiers sont placés dans un sous-répertoire du domicile de l'utilisateur. En principe, supprimer ce nouveau sous-répertoire pourrait résoudre le problème. A make install, avec les paramètres ci-dessus, tout effet secondaire, ou puis-je écrire dans mon guide d’utilisation que le sous-répertoire nouvellement créé peut être supprimé en tant que 'désinstaller'?

30
katang

Non, il n'y en a pas. Voir dans le FAQ du wiki CMake :

Par défaut, CMake ne fournit pas la cible "make uninstall", vous ne pouvez donc pas le faire. Nous ne voulons pas que "make uninstall" supprime les fichiers utiles du système.

Si vous souhaitez une cible "désinstaller" dans votre projet, personne ne vous empêchera d'en fournir une. Vous devez supprimer les fichiers répertoriés dans le fichier install_manifest.txt. [suivi d'un exemple de code]

22
usr1234567

Si vous souhaitez ajouter une cible désinstaller , vous pouvez consulter la FAQ officielle de CMake à:

https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake

Si vous voulez juste un moyen rapide de désinstaller tous les fichiers, lancez simplement:

xargs rm < install_manifest.txt

Le fichier install_manifest.txt Est créé lorsque vous exécutez make install.

Supprimer les fichiers et les dossiers (vides uniquement) ajoutés par make install d'un projet cmake:

cat install_manifest.txt | Sudo xargs rm
cat install_manifest.txt | xargs -L1 dirname | Sudo xargs rmdir -p

La deuxième commande imprimera un ensemble d'erreurs car elle supprime de manière récursive des dossiers jusqu'à ce qu'elle en trouve un qui n'est pas vide. J'aime voir ces erreurs pour savoir quels dossiers sont laissés. Si vous voulez masquer ces erreurs, vous pouvez ajouter --ignore-fail-on-non-empty à rmdir.

14
qwertzguy