2017-01-04 39 views
9

我試圖找到一些sudo免費解決方案,以使我的用戶可以安裝和取消阻止我的應用程序。使用CMake支持「make uninstall」嗎?

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 

工作正常。參考 What's the opposite of 'make install', ie. how do you uninstall a library in Linux? 我沒有發現任何想法,這是sudo - 免費,並非一個非系統管理員的人很複雜。

  1. 無論如何make uninstall支持CMake?

  2. 我的卸載非常簡單:所有文件都放在用戶家中的一個子目錄中。原則上,刪除新的子目錄可以解決問題。有make install,上面有參數,有什麼副作用,或者我可以在我的用戶指南中寫出新生成的子目錄可以作爲'卸載'被刪除?

+0

潛在重複:http://stackoverflow.com/questions/19921017/cleaning-cmake-installed-files – usr1234567

+1

[清理CMake安裝文件](https:// stackoverflow。com/questions/19921017/clean-cmake-installed-files) –

回答

6

不,沒有。看到FAQ from CMake wiki

默認情況下,CMake的不提供「使卸載」的目標,所以你 無法做到這一點。我們不希望「卸載」從系統中刪除有用的文件 。

如果你想在你的項目中使用「卸載」目標,那麼沒有人會阻止你提供一個目標。您需要刪除install_manifest.txt文件中列出的 文件。 [其次是一些示例代碼]

+0

我很高興看到有人相信,如果在開發過程中安裝了一個文件,它應該永遠呆在那裏。感謝提示,我將使用示例代碼。順便說一句:我想你也回答了我的#2問題:只是刪除包含文件的目錄將沒有副作用。 – katang

13

如果你想添加一個卸載的目標,你可以在看一下官方CMake的常見問題

https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F

如果您只想快速卸載所有文件,只需運行:

xargs rm < install_manifest.txt 

install_manifest.txt當您運行make install時會創建文件。

+1

但是這隻能刪除不是目錄的文件。沒關係,如果你只有頭文件和庫,但是如果你安裝了一個Python包,你必須創建類似'/home/user/.local/miniconda3/envs/galario3/lib/python3.6/site-packages/galario/ '。簡單的'xargs ...'不會刪除它們,因此您必須手動添加邏輯,例如在'uninstall'目標中 –

1

刪除文件和文件夾通過make install添加從cmake的項目(僅空):

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

第二個命令將打印一堆錯誤,因爲它遞歸地刪除文件夾,直到它找到一個不爲空。我喜歡看到這些錯誤,以知道哪些文件夾是剩下的。如果您想隱藏這些錯誤,您可以將--ignore-fail-on-non-empty添加到rmdir。