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.