Что противоположно "make install", т.е. Как вы удаляете библиотеку в Linux?

При запуске

./configure --prefix=/mingw 

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

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

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

ПРЕДУПРЕЖДЕНИЕ. Уже установлена ​​версия SDK плагина Vamp. Ожидайте беспокойства и печали, если вы установите новую версию, не удаляя сначала первую. (Продолжение)

Это меня беспокоило. Что противоположно "make install", т.е. Как библиотека удалена в Linux? Будет ли "очищать" работу, или есть другие шаги?

Ответ 1

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

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

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

Ответ 2

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

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

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


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

Ответ 3

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

cat install_manifest.txt | xargs echo rm | sh

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

cat install_manifest.txt | xargs echo sudo rm | sh

Ответ 4

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

make uninstall

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

Ответ 5

Как удалить после "сделать установку"

Способ № 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 есть серьезное замечание относительно этого метода, о котором вы должны помнить (дословно скопировано здесь): "Следите за файлами, которые также могли быть установлены другими пакетами. Простое удаление этих файлов [...] могло бы сломать другие пакеты. Это причина, по которой мы создали dir deleted-by-uninstall dir и переместили туда файлы, а не удаляли их.


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

Ответ 6

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

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

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

Ответ 8

К сожалению, нет стандарта, это одна из опасностей установки из источника. Некоторые Make файлы будут включать в себя "удаление", поэтому

make uninstall

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

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

Ответ 9

Я знаю несколько пакетов, которые поддерживают "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 [email protected] \
 --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, где вы можете.

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

Ответ 10

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

'cp <filelist> <destdir>/'

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

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

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