DESTDIR dan PREFIX pembuatan

118

Saya mencoba membuat penginstalan perangkat lunak ke direktori tertentu. Saya menemukan beberapa cara, tetapi tidak yakin apa perbedaan di antara mereka.

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

Saya bingung dengan fungsi ketiganya. Apakah mereka mencapai tujuan yang sama?

Sean
sumber

Jawaban:

184

./configure --prefix=***

Nomor 1 menentukan kemana paket akan pergi ketika diinstal, dan ke mana ia akan mencari file yang terkait saat dijalankan. Itulah yang harus Anda gunakan jika Anda hanya menyusun sesuatu untuk digunakan pada satu host.


make install DESTDIR=***

Nomor 2 adalah untuk menginstal ke direktori sementara yang bukan tempat paket akan dijalankan. Misalnya ini digunakan saat membuat debpaket. Orang yang membuat paket tidak benar-benar menginstal semuanya ke tempat terakhirnya di sistemnya sendiri. Dia mungkin sudah menginstal versi berbeda dan tidak ingin mengganggunya, atau mungkin dia bahkan bukan root. Jadi dia menggunakan

./configure --prefix=/usr

jadi program akan berharap untuk diinstal /usrsaat dijalankan, lalu

make install DESTDIR=debian/tmp

untuk benar-benar membuat struktur direktori.


make install prefix=***

Nomor 3 akan menginstalnya ke tempat yang berbeda tetapi tidak membuat semua direktori seperti biasanya DESTDIR=/foo/bar/baz. Ini biasanya digunakan dengan GNU stow via

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

, yang akan memasang binari /usr/local/stow/foo/bin. Dengan perbandingan,

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

akan menginstal binari /usr/local/stow/foo/usr/local/bin.

Alan Curry
sumber
8
Untuk apa nilainya, dalam build berbasis cmake Anda dapat meniru "case 4" (untuk stow, dll) dengan menjalankan cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakedi direktori build.
Ryan Pavlik
@JackKelly: Terima kasih! Saya telah menggunakan DESTDIR dengan GNU stow dan harus memperbaiki struktur direktori dengan mv usr/local/* . && rmdir usr/local && rmdir usrtipikal - menggunakan prefix=jauh lebih baik!
thinkki
Catatan: beberapa perangkat lunak tidak mendukung DESTDIR=/tmp/foo make install; untuk proyek berbasis cmake, saya lebih beruntung cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeuntuk menginstal /tmp/foo/{bin,...}; lihat github.com/opencv/opencv/issues/11833#issuecomment-401164056 sebagai contoh.
Timotheecour
Satu catatan lagi: DESTDIRdan prefixbisa digunakan make installbersama, mis make install DESTDIR=/foo/bar/tmp perfix=/local.
albert
1

Ini dapat membantu menggambarkan penggunaan DESTDIRdan --prefix(dari sini ):

Beberapa penginstalan menggunakan --prefix dan DESTDIR:

Tentukan lokasi --prefix / opsi yang berbeda untuk setiap build - pada waktu konfigurasi. Misalnya:

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
sumber
Jika file ./configure tidak tersedia, seseorang masih dapat menginstal ke direktori khusus pengguna menggunakan: make prefix = / path / to / your / lib / libaio install
Good Will
0

Dari openssl/INSTALL

Pembuat paket yang ingin mengonfigurasi pustaka untuk lokasi standar, tetapi memiliki paket yang diinstal di tempat lain sehingga dapat dengan mudah dipaketkan, dapat menggunakan

$ make INSTALL_PREFIX=/tmp/package-root install

(atau tentukan "--install_prefix = / tmp / package-root" sebagai opsi konfigurasi). Awalan yang ditentukan akan ditambahkan ke semua nama file target penginstalan.

Ini non-standar tetapi INSTALL_PREFIX digunakan di beberapa program lain.

Ini berfungsi untuk versi OpenSSL sebelum 1.1.x. OpenSSL 1.1.x dan yang lebih baru dapat mengenali seperti biasa DESTDIR.

kyb
sumber