Estou tentando fazer a instalação do software em um diretório específico. Encontrei várias maneiras, mas não tenho certeza de quais são as diferenças entre elas.
./configure --prefix=***
make install DESTDIR=***
make install prefix=***
Estou confuso sobre as funções desses três. Eles alcançam o mesmo objetivo?
O número 1 determina para onde o pacote irá quando for instalado e onde procurará seus arquivos associados quando for executado. É o que você deve usar se estiver apenas compilando algo para usar em um único host.
make install DESTDIR=***
O número 2 é para instalar em um diretório temporário que não é de onde o pacote será executado. Por exemplo, isso é usado ao construir debpacotes. A pessoa que está construindo o pacote não instala tudo em seu lugar final em seu próprio sistema. Ele pode já ter uma versão diferente instalada e não querer perturbá-la, ou pode nem mesmo ser root. Então ele usa
./configure --prefix=/usr
então, o programa deverá ser instalado /usrquando for executado, então
make install DESTDIR=debian/tmp
para realmente criar a estrutura de diretório.
make install prefix=***
O número 3 irá instalá-lo em um local diferente, mas não criará todos os diretórios como DESTDIR=/foo/bar/bazfaria. É comumente usado com GNU stow via
./configure --prefix=/usr/local&& make && sudo make install prefix=/usr/local/stow/foo
, que instalaria binários em /usr/local/stow/foo/bin. Por comparação,
make install DESTDIR=/usr/local/stow/foo
iria instalar binários em /usr/local/stow/foo/usr/local/bin.
Pelo que vale a pena, em uma construção baseada em cmake você pode emular o "case 4" (para stow, etc) executando cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakeno diretório de construção.
Ryan Pavlik
@JackKelly: Obrigado! Tenho usado DESTDIR com GNU stow e tive que corrigir a estrutura de diretório com um mv usr/local/* . && rmdir usr/local && rmdir usrtípico - usar prefix=é muito melhor!
thinkski
Nota: alguns softwares não suportam DESTDIR=/tmp/foo make install; para projetos baseados em cmake, tive mais sorte com o cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeque instala /tmp/foo/{bin,...}; consulte github.com/opencv/opencv/issues/11833#issuecomment-401164056 para obter um exemplo.
timotheecour
Mais uma nota: DESTDIRe prefixpodem ser usados make installjuntos, ou seja make install DESTDIR=/foo/bar/tmp perfix=/local.
Albert,
1
Isso pode ajudar a ilustrar o uso de DESTDIRe --prefix(a partir daqui ):
Várias instalações usando --prefix e DESTDIR:
Separe uma localização / opção --prefix diferente para cada compilação - no momento da configuração. Por exemplo:
untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-mpich --with-mpi-dir=/opt/mpich
make
make install DESTDIR=/tmp/petsc-pkg
untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-openmpi --with-mpi-dir=/opt/openmpi
make
make install DESTDIR=/tmp/petsc-pkg
Caso o arquivo ./configure não seja fornecido, ainda é possível instalar no diretório específico do usuário usando: make prefix = / path / to / your / lib / libaio install
Boa Vontade
0
De openssl/INSTALL
Os construtores de pacotes que desejam configurar a biblioteca para locais padrão, mas têm o pacote instalado em outro lugar para que possa ser facilmente empacotado, podem usar
$ make INSTALL_PREFIX=/tmp/package-root install
(ou especifique "--install_prefix = / tmp / package-root" como uma opção de configuração). O prefixo especificado será anexado a todos os nomes de arquivos de destino da instalação.
Isso não é padrão, mas INSTALL_PREFIX é usado em alguns outros programas.
Isso funciona para versões do OpenSSL anteriores a 1.1.x. OpenSSL 1.1.x e posteriores são capazes de reconhecer os usuais DESTDIR.
cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake
no diretório de construção.mv usr/local/* . && rmdir usr/local && rmdir usr
típico - usarprefix=
é muito melhor!DESTDIR=/tmp/foo make install
; para projetos baseados em cmake, tive mais sorte com ocmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmake
que instala/tmp/foo/{bin,...}
; consulte github.com/opencv/opencv/issues/11833#issuecomment-401164056 para obter um exemplo.DESTDIR
eprefix
podem ser usadosmake install
juntos, ou sejamake install DESTDIR=/foo/bar/tmp perfix=/local
.Isso pode ajudar a ilustrar o uso de
DESTDIR
e--prefix
(a partir daqui ):fonte
De
openssl/INSTALL
Isso não é padrão, mas INSTALL_PREFIX é usado em alguns outros programas.
Isso funciona para versões do OpenSSL anteriores a 1.1.x. OpenSSL 1.1.x e posteriores são capazes de reconhecer os usuais
DESTDIR
.fonte