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.?

Jon Phenow
fonte
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.

Thomas
fonte
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
Andor
fonte
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 //

samasat
fonte
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.

Árvore77
fonte
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.

Majid Azimi
fonte
1
a --prefixopção é a ./configureque você chama ANTES make.
Gus
-7

tente usar INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Christopher
fonte
11
Não sugira que as pessoas "tentem" algo sem nenhuma informação corroboradora.
31516 RichieHH
Isso deveria ser um comentário.
EJoshuaS - Restabelecer Monica