Saya mencoba membuat penginstalan perangkat lunak ke direktori tertentu. Saya menemukan beberapa cara, tetapi tidak yakin apa perbedaan di antara mereka.
./configure --prefix=***
make install DESTDIR=***
make install prefix=***
Saya bingung dengan fungsi ketiganya. Apakah mereka mencapai tujuan yang sama?
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.
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
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.
cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake
di direktori build.mv usr/local/* . && rmdir usr/local && rmdir usr
tipikal - menggunakanprefix=
jauh lebih baik!DESTDIR=/tmp/foo make install
; untuk proyek berbasis cmake, saya lebih beruntungcmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmake
untuk menginstal/tmp/foo/{bin,...}
; lihat github.com/opencv/opencv/issues/11833#issuecomment-401164056 sebagai contoh.DESTDIR
danprefix
bisa digunakanmake install
bersama, mismake install DESTDIR=/foo/bar/tmp perfix=/local
.Ini dapat membantu menggambarkan penggunaan
DESTDIR
dan--prefix
(dari sini ):sumber
Dari
openssl/INSTALL
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
.sumber