DESTDIR ve PREFIX of make


120

Belirli bir dizine yazılım yüklemesi yapmaya çalışıyorum. Birkaç yol buldum, ancak aralarındaki farkların ne olduğundan emin değilim.

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

Bu üçünün işlevleri konusunda kafam karıştı. Aynı hedefe ulaşıyorlar mı?

Yanıtlar:


185

./configure --prefix=***

1 numara , paketin kurulduğunda nereye gideceğini ve çalıştırıldığında ilişkili dosyaları nerede arayacağını belirler. Tek bir ana bilgisayarda kullanılmak üzere bir şeyler derliyorsanız kullanmanız gereken şey budur.


make install DESTDIR=***

Numara 2 , paketin çalıştırılacağı yer olmayan geçici bir dizine kurmak içindir. Örneğin bu, debpaketler oluştururken kullanılır . Paketi oluşturan kişi aslında her şeyi kendi sistemindeki son yerine yüklemiyor. Zaten yüklenmiş farklı bir sürümü olabilir ve onu rahatsız etmek istemeyebilir veya root bile olmayabilir. Bu yüzden kullanır

./configure --prefix=/usr

bu nedenle program /usrçalıştığında yüklenmeyi bekler.

make install DESTDIR=debian/tmp

aslında dizin yapısını oluşturmak için.


make install prefix=***

Number 3 onu farklı bir yere kuracak, ancak tüm dizinleri olduğu gibi oluşturmayacak DESTDIR=/foo/bar/baz. Yaygın olarak GNU stow ile kullanılır.

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

, bu da ikilileri yükler /usr/local/stow/foo/bin. Kıyasla,

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

ikili dosyaları yükler /usr/local/stow/foo/usr/local/bin.


8
Değeri ne olursa olsun, cmake tabanlı bir yapıda cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake, yapı dizininde çalıştırarak "case 4" (stow vb. İçin) taklit edebilirsiniz .
Ryan Pavlik

@JackKelly: Teşekkürler! DESTDIR'i GNU stow ile kullanıyorum ve dizin yapısını mv usr/local/* . && rmdir usr/local && rmdir usrtipik olarak - kullanmak prefix=çok daha iyi!
thinkski

Not: bazı yazılımlar desteklemez DESTDIR=/tmp/foo make install; cmake tabanlı projeler için, cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakehangi kurulumlara daha fazla şansım oldu /tmp/foo/{bin,...}; Örnek için bkz. github.com/opencv/opencv/issues/11833#issuecomment-401164056 .
timotheecour

Bir not daha: DESTDIRve birlikte prefixkullanılabilir make install, yani make install DESTDIR=/foo/bar/tmp perfix=/local.
albert

1

Bu, DESTDIRve --prefix( buradan ) kullanımının gösterilmesine yardımcı olabilir :

--Prefix ve DESTDIR kullanarak birden çok yükleme:

Yapılandırma sırasında her derleme için farklı bir --prefix konumu / seçeneği ayırın. Örneğin:

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

./Configure dosyasının sağlanmaması durumunda, kullanıcıya özel dizine şu komutlarla da yüklenebilir: make prefix = / path / to / your / lib / libaio install
Good Will

0

itibaren openssl/INSTALL

Kitaplığı standart konumlar için yapılandırmak isteyen, ancak paketi başka bir yere yükleyerek kolayca paketlenmesini isteyen paket oluşturucular,

$ make INSTALL_PREFIX=/tmp/package-root install

(veya yapılandırma seçeneği olarak "--install_prefix = / tmp / package-root" seçeneğini belirtin). Belirtilen önek, tüm yükleme hedefi dosya adlarının başına eklenecektir.

Bu standart değildir, ancak INSTALL_PREFIX bazı diğer programlarda kullanılır.

Bu, 1.1.x'ten önceki OpenSSL sürümleri için geçerlidir. OpenSSL 1.1.x ve sonraki sürümleri her zamanki gibi tanıyabilir DESTDIR.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.