Resumo executivo / TL; DR
Execute make uninstall
(ou sudo make uninstall
, se você tiver executado sudo make install
) no diretório de compilação no qual você executou make
e make install
. Em compilações configuradas com o CMake, o diretório de compilação geralmente não é o diretório de origem de nível superior. Mas, além disso, desinstalar um programa ou biblioteca cuja construção foi configurada com o CMake não é diferente da desinstalação de outros programas ou bibliotecas que você construiu a partir do código-fonte.
Alguns softwares suportam make install
, mas não make uninstall
. Nesse caso, você pode ter que investigar quais etapas foram executadas quando make install
é executado ou consultar a documentação do software para ver se especifica quais arquivos ele coloca. No entanto, PCL aparece para suportar a desinstalação via make uninstall
.
Instalação e desinstalação com cmake
e make
O CMake é um sistema para configurar uma compilação. Uma vez configurado, a compilação deve ser executada usando algum sistema de compilação. . Em sistemas operacionais como o Unix, como o Ubuntu, os builds configurados com o CMake quase sempre usam o sistema Make build.
A maioria dos softwares que usam o CMake exige que você crie um diretório de compilação separado, geralmente chamado build
, e execute o comando cmake
desse diretório. O diretório de construção é preenchido com arquivos necessários para executar a construção. Então você executa make
nesse diretório. Você deve criar o diretório build
onde quer que as instruções para o software que você está construindo o recomendem. Geralmente, será um subdiretório do diretório de nível superior da árvore de origem (o diretório de nível mais alto criado quando você descompactou o tarball de origem ou invocou um sistema de controle de versão como git
ou bzr
para fazer o download do código).
Quando você executa make
, ele encontra e lê um makefile - geralmente chamado de Makefile
- que contém uma lista de destinos, instruções para construir os destinos e como os destinos dependem uns dos outros. Geralmente, o destino padrão, que você não precisa especificar, cria o software e o install
target, que você precisa especificar, o instala.
Muitos makefiles contêm destinos adicionais. Os mais comuns são:
- Um destino
check
outest
que testa o software que foi construído.make check
oumake test
pode ser executado antes demake install
, e geralmente é aconselhável fazê-lo. - Um destino
uninstall
que desinstala o software removendo os arquivos criados executandomake install
. (Ocasionalmentemake uninstall
tem outro comportamento também, para desfazer ações demake install
além de copiar arquivos, mas geralmente é apenas uma questão de excluir arquivos.) Nem todos os softwares têmuninstall
de destino, mas a maioria faz isso. - Um
clean
de destino para excluir arquivos do diretório de origem ou de criação que foram criados durante a construção. Quase todos os makefiles têm isso.
Existem alguns outros destinos relativamente comuns, como distclean
e realclean
, que são menos relevantes para o CMake. No entanto, é útil saber que, se você configurou uma compilação executando um script de configuração ( ./configure
) em vez de CMake, a configuração geralmente pode ser apagada executando make distclean
.
Um desenvolvedor que usa o CMake deve escrever código para gerar um uninstall
target - O CMake não faz isso automaticamente . No entanto, como muitos desenvolvedores, os desenvolvedores de PCL têm feito isso e make uninstall
deve funcionar. Veja a próxima seção ("Um exemplo passo-a-passo") para detalhes.
Para desinstalar o software cujo makefile suporta um uninstall
target:
- O diretório a partir do qual você executou
make install
(ousudo make install
) é o diretório para o qual você deve retornar, para executarmake uninstall
(ousudo make uninstall
). Para o software que não usa o CMake, esse geralmente é o diretório de nível superior da árvore de origem. Mas para o software que faz usar o CMake, geralmente não é - em vez disso, geralmente é um diretório de compilação separado. - Ao instalar o software manualmente a partir da origem, é melhor manter o código-fonte e todos os arquivos criados durante a compilação, para que você possa desinstalar o software facilmente. Portanto, depois de executar
make install
, é melhor não executarmake clean
(nem excluir manualmente nenhum arquivo). - No entanto, se você executou executar
make clean
ou excluir o código-fonte ou o diretório de criação do software, ainda é possível desinstalar com êxito . Simplesmente siga as mesmas etapas de compilação, com a mesma versão exata do software, configurado e construído com as mesmas opções (ou nenhuma, se você não personalizou), para chegar ao ponto em que você pode executarmake uninstall
(ou% código%). Para alguns softwares, você pode até ter que executarsudo make uninstall
novamente, o que geralmente sobrescreve os arquivos da compilação anterior.Em seguida, executemake install
(oumake uninstall
) como de costume.
Quando não houver% de destino sudo make uninstall
e você precisar desinstalar o software, será necessário examinar quais arquivos ele cria. Você pode executar uninstall
para mostrar quais ações foram tomadas por make -n install
. Você não precisa executar make install
com make -n install
(assumindo que o% inicial co_de% não exigiu sudo
). Quando make
recebe o sinal sudo
, executa uma execução a seco, que normalmente não deve alterar nada e, portanto, não deve fazer nada que exija privilégios elevados.
Um exemplo passo-a-passo: PCL 1.7.2
É útil dar um exemplo, e eu também posso usar o software que você está tentando desinstalar como esse exemplo. PCL 1.7.2 aparece para usar make
para gerar uma meta -n
em seu makefile e, portanto, deve suportar cmake
.
Além de examinar uninstall
, verifiquei que o make uninstall
gerado contém uma meta uninstall_target.cmake.in
em um sistema de teste Ubuntu 16.04 de 64 bits. No entanto, ainda não terminei de criar PCL para poder instalá-lo e testar Makefile
. (Minha máquina de teste é muito lenta e PCL é grande.) Eu planejo atualizar isso com informações adicionais quando tiver a chance de fazê-lo, algum tempo depois que a compilação terminar.
Quando você instalou o PCL 1.7.2, provavelmente fez algo assim:
cd /usr/local/src
wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.7.2.tar.gz
tar xf pcl-1.7.2.tar.gz
cd pcl-pcl-1.7.2
mkdir build
cd build
cmake ..
make -j2
sudo make -j2 install
Isso se baseia (livremente) em as instruções oficiais , mas é claro que pode não ser exatamente o que você fez. Em particular, eu fiz o download e descompactei uninstall
em sudo make uninstall
. Se você colocar em outro lugar, então você terá que substituir pcl-1.7.2.tar.gz
por onde quer que tenha colocado.
Alterando /usr/local/src
, se necessário, você deve conseguir desinstalar o software executando:
cd /usr/local/src/pcl-pcl-1.7.2/build
sudo make uninstall
Mesmo que você execute /usr/local/src
para permitir que várias operações ocorram simultaneamente, não será necessário passar o sinal /usr/local/src
ao executar make -j2 install
.