web-dev-qa-db-ja.com

CMakeは「make uninstall」をサポートしていますか?

ユーザーがアプリケーションをインストールしてアンインストールできるようにするためのSudo- freeソリューションを見つけようとしています。を使用して

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}/")

ファイルをユーザーのホームディレクトリに送信できます。

make install

正常に動作します。 「make install」の反対、つまりLinuxでライブラリをアンインストールする方法は? を参照すると、Sudo- freeでアイデアが見つからなかったシステム管理者以外の人にとっては複雑です。

  1. とにかくmake uninstall CMakeでサポートされていますか?

  2. 私のアンインストールは非常に簡単です。すべてのファイルはユーザーのホームのサブディレクトリに保存されます。原則として、新しいサブディレクトリが問題を解決できることを削除しました。 make install、上記のパラメータ、任意の副作用、または新しく作成されたサブディレクトリを「アンインストール」として削除できることをユーザーガイドに記述できますか?

30
katang

いいえ、ありません。 CMake wikiからのFAQ を参照してください:

デフォルトでは、CMakeは「make uninstall」ターゲットを提供しないため、これを行うことはできません。 「make uninstall」でシステムから有用なファイルを削除することは望ましくありません。

プロジェクトで「アンインストール」ターゲットが必要な場合、誰もそれを提供することを妨げません。 install_manifest.txtファイルにリストされているファイルを削除する必要があります。 [いくつかのサンプルコードが続きます]

22
usr1234567

uninstallターゲットを追加する場合は、公式CMake FAQat:

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

すべてのファイルをすばやくアンインストールする方法が必要な場合は、次を実行します。

xargs rm < install_manifest.txt

install_manifest.txtを実行すると、make installファイルが作成されます。

make installによって追加されたファイルとフォルダー(空のみ)をcmakeプロジェクトから削除します。

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

2番目のコマンドは、空ではないフォルダーが見つかるまで再帰的にフォルダーを削除するため、大量のエラーを出力します。これらのエラーを見て、どのフォルダーが残っているかを知るのが好きです。これらのエラーを非表示にする場合は、--ignore-fail-on-non-emptyをrmdirに追加できます。

14
qwertzguy