2017-01-04 15 views
9

Próbuję znaleźć jakieś wolne rozwiązanie, aby umożliwić moim użytkownikom instalację i unifikację mojej aplikacji. KorzystanieObsługa 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}/") 

mogę skierować pliki do katalogu domowego użytkownika, a

make install 

działa dobrze. W odniesieniu do What's the opposite of 'make install', ie. how do you uninstall a library in Linux? nie znalazłem żadnego pomysłu, który jest sudo - bezpłatny i nie jest skomplikowany dla osoby nie będącej administratorem systemu.

  1. Czy w każdym razie make uninstall jest obsługiwany przez CMake?

  2. Moja deinstalacja jest bardzo prosta: wszystkie pliki przechodzą do podkatalogu domu użytkownika. Zasadniczo usunięty ten nowy podkatalog mógłby rozwiązać problem. Czy make install, z powyższymi parametrami, jakikolwiek efekt uboczny, czy mogę napisać w mojej instrukcji obsługi, że nowo wyprodukowany podkatalog można usunąć jako "odinstalować"?

+0

Potencjalny duplikat: http://stackoverflow.com/questions/19921017/cleaning-cmake-installed-files – usr1234567

+1

Możliwy duplikat [Cleaning CMake installed files] (https: // stackoverflow.com/questions/19921017/cleaning-cmake-installed-files-files) –

Odpowiedz

6

Nie, nie ma. Zobacz w FAQ from CMake wiki:

Domyślnie CUpewnij nie przewiduje „make uninstall” target, więc nie może tego zrobić. Nie chcemy, aby "make uninstall" usuwał z systemu użyteczne pliki .

Jeśli chcesz, aby cel "odinstaluj" w projekcie, , nikt nie uniemożliwi ci go. Musisz usunąć pliki wymienione w pliku install_manifest.txt. [Następnie przez jakiś przykładowy kod]

+0

Cieszę się, że są ludzie, którzy wierzą, że jeśli zainstaluje się plik podczas rozwoju, pozostanie tam na zawsze. Dzięki za podpowiedź, użyję przykładowego kodu. BTW: Myślę, że również odpowiedziałeś na moje # 2 pytanie: po prostu usunięcie katalogu zawierającego pliki nie będzie miało skutków ubocznych. – katang

13

Jeśli chcesz dodać odinstaluj cel może spojrzeć na oficjalnej CMake FAQ w:

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

Jeśli chcesz tylko szybko odinstalować wszystkie pliki, po prostu uruchom:

xargs rm < install_manifest.txt 

install_manifest.txt plik jest tworzony po uruchomieniu make install.

+1

Ale to tylko usuwa pliki, a nie katalogi. Jest to ok, jeśli masz tylko nagłówki i biblioteki, ale jeśli instalujesz pakiet python, musisz utworzyć katalogi takie jak '/home/user/.local/miniconda3/envs/galario3/lib/python3.6/site-packages/galario/ '. proste 'xargs ...' nie usuwa ich, więc musisz ręcznie dodać logikę, na przykład w celu 'uninstall' –

1

Usuń pliki i foldery (pustych tylko) dodane przez make install z projektu cmake:

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

Drugie polecenie wypisze kilka błędów, ponieważ rekurencyjnie usuwa foldery, aż znajdzie taki, który nie jest pusty. Lubię zobaczyć te błędy, aby dowiedzieć się, które foldery pozostały. Jeśli chcesz ukryć te błędy, możesz dodać --ignore-fail-on-non-empty do rmdir.