Что противоположно «make install», то есть как вы удаляете библиотеку в Linux? - PullRequest
362 голосов
/ 17 сентября 2009

во время работы

./configure --prefix=/mingw 

в системе MinGW / MSYS для библиотеки, которую я ранее запускал

'./configure --prefix=/mingw && make && make install' 

Я наткнулся на это сообщение:

ВНИМАНИЕ: Версия SDK плагина Vamp уже установлена. Ожидайте беспокойства и печали, если вы устанавливаете новую версию, не удаляя старую. (Продолжение)

Это меня беспокоило. Что противоположно «make install», то есть как библиотека удалена в Linux? Будет ли 'make clean' выполнять работу, или есть другие шаги?

Ответы [ 10 ]

476 голосов
/ 17 сентября 2009

make clean удаляет любые промежуточные или выходные файлы из вашего дерева исходных кодов / сборки. Однако это влияет только на дерево исходного кода / сборки; он не касается остальной части файловой системы и поэтому не удалит ранее установленное программное обеспечение.

Если вам повезет, работает make uninstall. Однако, это зависит от авторов библиотеки; некоторые авторы предоставляют цель uninstall, другие - нет.

Если вам не повезет, вам придется удалить его вручную. Запуск make -n install может быть полезным, так как он покажет шаги, которые программное обеспечение предпримет, чтобы установить себя, но на самом деле ничего не сделает. Затем вы можете вручную выполнить эти шаги в обратном порядке.

330 голосов
/ 25 января 2013

Если sudo make uninstall недоступно:

В системе на основе Debian вместо (или после *) выполнения make install вы можете запустить sudo checkinstall, чтобы создать файл .deb, который будет автоматически установлен. Затем вы можете удалить его с помощью системного менеджера пакетов (например, apt / synaptic / aptitude / dpkg). Checkinstall также поддерживает создание других типов пакетов, например, RPM.

См. Также http://community.linuxmint.com/tutorial/view/162 и базовое использование checkinstall и пакет debian checkinstall .


*: Если вы читаете это после установки с помощью make install, вы все равно можете следовать приведенным выше инструкциям и затем выполнить dpkg -r $PACKAGE_NAME_YOU_CHOSEN.

56 голосов
/ 13 января 2014

Если у вас есть файл manifest, в котором перечислены все файлы, которые были установлены с make install, вы можете запустить эту команду, которую я получил из другого ответа:

cat install_manifest.txt | xargs echo rm | sh

Если у вас есть sudo make install, вам нужно добавить sudo к вашему удалению:

cat install_manifest.txt | xargs echo sudo rm | sh
24 голосов
/ 17 сентября 2009

В зависимости от того, насколько хорошо волшебная программа makefile / configure / autofoo для данной программы может решить следующее,

make uninstall

Проблема заключается в том, что вы должны выполнить это в исходном дереве версии, которую вы установили, и с точно такой же конфигурацией, которую вы использовали для установки.

12 голосов
/ 17 июня 2018

Как удалить после "make install"

Метод № 1 (сделать удаление)

Шаг 1: Вам нужно следовать этому шагу , только если вы удалили / изменили каталог сборки любым способом: Загрузите и выполните / сделайте установку, используя точную ту же процедуру как ты делал раньше

Шаг 2: попробуйте сделать деинсталляцию.

cd $SOURCE_DIR 
sudo make uninstall

Если , то вам это удастся. Если вы параноик, вы можете также попробовать шаги «Метод № 3» , чтобы убедиться, что make uninstall не пропустил ни одного файла.

Метод # 2 (checkinstall - только для систем на основе Debian)

Обзор процесса

В системах на основе Debian (например, Ubuntu) вы можете очень легко создать пакет .deb, используя инструмент с именем checkinstall. Затем вы устанавливаете пакет .deb (это заставит вашу систему Debian понять, что все части вашего пакета действительно установлены) и, наконец, удалите его, чтобы менеджер пакетов правильно очистил вашу систему.

Шаг за шагом

sudo apt -y install checkinstall
cd $SOURCE_DIR 
sudo checkinstall

В этот момент checkinstall запросит имя пакета. Введите что-то немного описательное и запишите, потому что вы будете использовать это через минуту. Он также запросит еще несколько данных, которые вы можете игнорировать. Если он жалуется на неприемлемую версию, просто введите что-то разумное, например 1.0. По завершении вы можете установить и окончательно удалить:

sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED

Метод № 3 (install_manifest.txt)

Если в исходном каталоге присутствует файл install_manifest.txt, он должен содержать имена файлов каждого отдельного файла, созданного установкой.

Итак, сначала проверьте список файлов и время их модификации:

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

Вы должны получить ноль ошибок , а время модификации перечисленных файлов должно быть во время или после времени установки. Если все в порядке, вы можете удалить их за один раз:

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

Пользователь Merlyn Morgan-Graham, однако, имеет серьезное замечание относительно этого метода, о котором следует помнить (дословно скопировано здесь): "Следите за файлами, которые также могли быть установлены другими пакетами. Просто удалите эти файлы [...] может сломать другие пакеты. ". По этой причине мы создали deleted-by-uninstall dir и переместили туда файлы вместо того, чтобы удалить их.


99% этой записи существовало в других ответах. Я просто собрал все полезное в (надеюсь) простом практическом руководстве и попытался уделить дополнительное внимание важным деталям (таким как цитирование аргументов xarg и хранение резервных копий удаленных файлов).

10 голосов
/ 17 сентября 2009

make clean обычно очищает только встроенные файлы в каталоге, содержащем сам исходный код, и редко касается любого установленного программного обеспечения.

Makefiles, как правило, не содержат цели для удаления - вам обычно приходится делать это самостоятельно, удаляя файлы из каталога, в который они были установлены. Например, если вы собрали программу и установили ее (используя make install) в /usr/local, вам нужно просмотреть /usr/local/bin, /usr/local/libexec, /usr/local/share/man и т. Д. И удалить ненужные файлы. Иногда Makefile включает цель uninstall, но не всегда.

Конечно, обычно в системе Linux вы устанавливаете программное обеспечение с помощью диспетчера пакетов , который способен деинсталлировать программное обеспечение «автоматически».

7 голосов
/ 04 августа 2013

Утилита "stow" была разработана для решения этой проблемы: http://www.gnu.org/software/stow/

5 голосов
/ 17 сентября 2009

К сожалению, нет стандарта, это одна из опасностей установки из исходного кода. Некоторые файлы Makefile будут включать «удаление», поэтому

make uninstall

из исходного каталога может работать. В противном случае, это может быть вопросом ручного удаления того, что сделал make install.

make clean обычно просто очищает исходный каталог - удаляя сгенерированные / скомпилированные файлы и т.п., вероятно, не то, что вам нужно.

0 голосов
/ 05 мая 2019

Make может сказать вам, что он знает и что он будет делать. Предположим, у вас есть цель «install», которая выполняет команды вроде:

cp <filelist> <destdir>/

В ваших общих правилах добавьте:

uninstall :; MAKEFLAGS= ${MAKE} -j1 -spinf $(word 1,${MAKEFILE_LIST}) install \
              | awk '/^cp /{dest=$NF; for (i=NF; --i>0;) {print dest"/"$i}}' \
              | xargs rm -f

Подобный трюк может сделать общий make clean.

0 голосов
/ 27 февраля 2019

Мне известно о немногих пакетах, которые поддерживают «make uninstall», но многие другие поддерживают make install DESTDIR = xxx «для поэтапной установки.

Вы можете использовать это для создания пакета, который вы устанавливаете вместо установки непосредственно из источника. Мне не повезло с checkinstall, но fpm работает очень хорошо.

Это также может помочь вам удалить пакет, ранее установленный с помощью make install . Вы просто принудительно устанавливаете свой собранный пакет поверх установленного, а затем удаляете его.

Например, я недавно использовал это для работы с protobuf-3.3.0. На RHEL7:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m you@youraddress.com \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

Предпочитаю ням-оборотам, если можешь.

В Debian9:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

Предпочитаю использовать dpkg, где вы можете.

Я также опубликовал ответ на этот вопрос здесь

...