DESTDIR e PREFIX de make

118

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.

  1. ./configure --prefix=***
  2. make install DESTDIR=***
  3. make install prefix=***

Estou confuso sobre as funções desses três. Eles alcançam o mesmo objetivo?

Sean
fonte

Respostas:

184

./configure --prefix=***

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.

Alan Curry
fonte
8
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
sancho.s ReinstateMonicaCellio
fonte
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.

kyb
fonte