DESTDIR i PREFIX marki

119

Próbuję zainstalować oprogramowanie w określonym katalogu. Znalazłem kilka sposobów, ale nie jestem pewien, jakie są między nimi różnice.

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

Jestem zdezorientowany co do funkcji tych trzech. Czy osiągają ten sam cel?

Sean
źródło

Odpowiedzi:

185

./configure --prefix=***

Numer 1 określa, gdzie pakiet trafi po zainstalowaniu i gdzie będzie szukał powiązanych z nim plików, gdy zostanie uruchomiony. To jest to, czego powinieneś użyć, jeśli kompilujesz coś do użytku na jednym hoście.


make install DESTDIR=***

Numer 2 dotyczy instalacji w katalogu tymczasowym, z którego nie będzie uruchamiany pakiet. Na przykład jest to używane podczas budowania debpakietów. Osoba budująca pakiet w rzeczywistości nie instaluje wszystkiego w swoim ostatecznym miejscu we własnym systemie. Może mieć już zainstalowaną inną wersję i nie chce jej przeszkadzać lub może nawet nie być rootem. Więc używa

./configure --prefix=/usr

więc program będzie oczekiwał, że zostanie zainstalowany w programie /usrpo uruchomieniu

make install DESTDIR=debian/tmp

aby faktycznie stworzyć strukturę katalogów.


make install prefix=***

Numer 3 zainstaluje go w innym miejscu, ale nie utworzy wszystkich katalogów DESTDIR=/foo/bar/baz. Jest powszechnie używany z GNU stow via

./configure --prefix=/usr/local && make && sudo make install prefix=/usr/local/stow/foo

, który zainstalowałby pliki binarne w /usr/local/stow/foo/bin. W stosunku,

make install DESTDIR=/usr/local/stow/foo

zainstalowałby pliki binarne w /usr/local/stow/foo/usr/local/bin.

Alan Curry
źródło
8
Co jest warte, w kompilacji opartej na cmake możesz emulować "przypadek 4" (do przechowywania itp.), Uruchamiając cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakew katalogu kompilacji.
Ryan Pavlik
@JackKelly: Dzięki! Używałem DESTDIR z GNU stow i musiałem naprawić strukturę katalogów z mv usr/local/* . && rmdir usr/local && rmdir usrtypowym - użycie prefix=jest znacznie lepsze!
thinkski
Uwaga: niektóre programy nie obsługują DESTDIR=/tmp/foo make install; w przypadku projektów opartych na cmake miałem więcej szczęścia z cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeinstalacjami /tmp/foo/{bin,...}; na przykład patrz github.com/opencv/opencv/issues/11833#issuecomment-401164056 .
timotheecour
Jeszcze jedna uwaga: DESTDIRi prefixmogą być używane make installrazem, tj make install DESTDIR=/foo/bar/tmp perfix=/local.
Albert
1

Może to pomóc w zilustrowaniu użycia DESTDIRi --prefix( stąd ):

Wiele instalacji przy użyciu --prefix i DESTDIR:

Oddziel inną lokalizację / opcję --prefix dla każdej kompilacji - w czasie konfiguracji. Na przykład:

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
źródło
W przypadku, gdy plik ./configure nie jest dostarczony, można nadal zainstalować w katalogu użytkownika za pomocą: make prefix = / path / to / your / lib / libaio install
Good Will
0

Z openssl/INSTALL

Twórcy pakietów, którzy chcą skonfigurować bibliotekę dla standardowych lokalizacji, ale mają pakiet zainstalowany w innym miejscu, aby można go było łatwo spakować, mogą użyć

$ make INSTALL_PREFIX=/tmp/package-root install

(lub określ „--install_prefix = / tmp / package-root” jako opcję konfiguracji). Określony przedrostek zostanie dodany do wszystkich nazw plików docelowych instalacji.

Jest to niestandardowe, ale INSTALL_PREFIX jest używany w niektórych innych programach.

Działa to dla wersji OpenSSL starszych niż 1.1.x. OpenSSL 1.1.xi nowsze wersje potrafią rozpoznać zwykłe pliki DESTDIR.

kyb
źródło