Faça a instalação, mas não para os diretórios padrão?


148

Eu quero executar 'make install' para ter tudo o que preciso, mas eu gostaria que ele instalasse as coisas em sua própria pasta, em oposição ao / usr / bin etc. do sistema, é possível? mesmo que faça referência a ferramentas no / usr / bin etc.?


3
Se você já construiu o projeto e você correu ./configure sem um prefixo e você deseja instalá-lo em um caminho personalizado, consulte stackoverflow.com/a/17679654/313113
— Bitek

Respostas:


212

Depende do pacote. Se o Makefile é gerado pelo GNU autotools ( ./configure), você pode definir o local de destino da seguinte maneira:

./configure --prefix=/somewhere/else/than/usr/local

Se o Makefile não for gerado por ferramentas automáticas, mas distribuído junto com o software, basta abri-lo em um editor e alterá-lo. O diretório de destino da instalação provavelmente está definido em uma variável em algum lugar.


9
não deve make && make installseguir a cláusula de configuração?
— Nass 26/06

1
O problema que tenho --prefixé que, se você executar um stringsno binário resultante posteriormente, verá que o caminho é armazenado dentro. Não sei por que isso aconteceu, mas certamente não quero os caminhos da minha máquina nos binários enviados para outros usuários.
— Erik Aigner

Erik, parece que haverá referências ao caminho que você executa, de qualquer maneira, se você construir a partir do código-fonte.
— Konstantin Rybakov 29/01

44

Como não sabe qual versão do automake, você pode usar a variável de ambiente DESTDIR .
Veja Makefile para ter certeza.

Por exemplo:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install

9
Isso funciona quando você executou o configure sem o argumento da linha de comando --prefix e já construiu o projeto, mas não deseja instalá-lo nos locais padrão, mas especifica um caminho de instalação personalizado. Isto irá anexar o usr default / / bin local / caminho para o DESTDIR e seu projeto será instalado em $ HOME / Software / localinstall / usr / / bin local /
— Bitek

Esta é uma solução brilhante. Não sei por que essa não é a resposta escolhida! Quase todas as outras respostas pedem para reconfigurar, o que significa que é preciso refazer também. Imagine ter compilado após 2 a 3 horas o superbuild MITK inteiro e, em seguida, ser solicitado a refazê-lo, apenas porque eu quero instalar os arquivos compilados em um local diferente. Este aqui é um trabalho maravilhoso para evitar essa situação.
— Duck Dodgers

23
make DESTDIR=./new/customized/path install

Este comando rápido funcionou para mim na instalação do opencv release 3.2.0 no Ubuntu 16. O caminho DESTDIR pode ser relativo e absoluto.

Esse redirecionamento também pode ser útil caso o usuário não tenha privilégios de administrador, desde que a localização do DESTDIR tenha acesso correto para o usuário. por exemplo, / home //


1
também pode ser necessário para substituir PREFIX se ele tem um valor padrão dentro do makefile
— Mark Ch

17

Pode ser dependente do que é suportado pelo módulo que você está tentando compilar. Se seu makefile é gerado usando ferramentas automáticas, use:

--prefix=<myinstalldir>

ao executar o ./configure

alguns pacotes permitem que você também substitua ao executar:

make prefix=<myinstalldir>

no entanto, se você não estiver usando ./configure, a única maneira de saber com certeza é abrir o makefile e verificar. Deve ser uma das primeiras variáveis ​​no topo.


3
você também deve estar ciente de que make prefix=...pode resultar em binários com caminhos embutidos erradas, uma vez que aqueles normalmente não pode ser modificado depois./configure --prefix=...
— Tobias KIENZLER


0

Eu tentei as soluções acima. Nenhum funcionou.

No final, abri o arquivo Makefile e alterei manualmente o caminho do prefixo para o caminho de instalação desejado, como abaixo.

PREFIX ?= "installation path"

Quando tentei --prefix, "make" reclamou que não existe tal entrada de comando. No entanto, talvez alguns pacotes aceitem --prefix, que é obviamente uma solução mais limpa.


1
a --prefixopção é a ./configureque você chama ANTES make.
— Gus

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.