Lakukan instal, tetapi tidak ke direktori default?

148

Saya ingin menjalankan 'make install' jadi saya memiliki semua yang saya butuhkan, tetapi saya ingin menginstalnya di folder mereka sendiri sebagai lawan dari sistem / usr / bin dll. Apakah itu mungkin? bahkan jika referensi alat di / usr / bin dll?

Jon Phenow
sumber
3
Jika Anda telah membangun proyek dan Anda menjalankan ./configure tanpa awalan dan Anda ingin menginstalnya di jalur khusus, lihat stackoverflow.com/a/17679654/313113
bitek

Jawaban:

213

Tergantung paketnya. Jika Makefile dihasilkan oleh GNU autotools ( ./configure) Anda biasanya dapat mengatur lokasi target seperti:

./configure --prefix=/somewhere/else/than/usr/local

Jika Makefile tidak dihasilkan oleh autotools, tetapi didistribusikan bersama dengan perangkat lunak, cukup buka di editor dan ubah. Direktori target instal mungkin didefinisikan dalam suatu variabel di suatu tempat.

Thomas
sumber
9
tidak harus make && make installmengikuti klausa configure?
nass
1
Masalah yang saya miliki --prefixadalah bahwa jika Anda menjalankan stringsbiner yang dihasilkan setelahnya, Anda melihat bahwa path disimpan di dalamnya. Saya tidak tahu mengapa ini terjadi, tetapi saya tentu tidak ingin jalur mesin saya pada biner yang saya kirimkan ke pengguna lain.
Erik Aigner
Erik, sepertinya akan ada referensi ke jalur yang Anda jalankan buat, jika Anda membangun dari sumber.
Konstantin Rybakov
44

Karena tidak tahu versi automake yang mana Anda dapat menggunakan variabel lingkungan DESTDIR .
Lihat Makefile untuk memastikan.

Sebagai contoh:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install
Andor
sumber
9
Ini berfungsi ketika Anda menjalankan konfigurasi tanpa argumen baris perintah --prefix dan Anda sudah membangun proyek tetapi Anda tidak ingin menginstalnya di lokasi default tetapi sebaliknya tentukan jalur instalasi khusus. Ini akan menambahkan path default usr / local / bin / ke DESTDIR dan proyek Anda akan diinstal ke dalam $ HOME / Software / LocalInstall / usr / local / bin /
bitek
Ini solusi brilian. Saya tidak tahu mengapa ini bukan jawaban yang dipilih! Hampir semua jawaban lain meminta untuk mengkonfigurasi ulang, yang berarti kita perlu membuat ulang juga. Bayangkan setelah dikompilasi setelah 2 ~ 3 jam seluruh MITK superbuild dan kemudian diminta untuk mengulanginya, hanya karena saya ingin menginstal file yang dikompilasi ke lokasi yang berbeda. Ini di sini adalah pekerjaan luar biasa untuk menghindari situasi itu.
Bebek Dodgers
23
make DESTDIR=./new/customized/path install

Perintah cepat ini berfungsi untuk saya untuk instalasi rilis 3.2.0 opencv pada Ubuntu 16. Path DESTDIR bisa relatif dan absolut.

Pengalihan seperti itu juga dapat bermanfaat jika pengguna tidak memiliki hak admin selama lokasi DESTDIR memiliki akses yang tepat bagi pengguna. misalnya / home //

samasat
sumber
1
mungkin juga perlu mengganti PREFIX jika memiliki nilai default di dalam makefile
Mark Ch
17

Itu bisa bergantung pada apa yang didukung oleh modul yang Anda coba kompilasi. Jika makefile Anda dihasilkan dengan menggunakan autotools, gunakan:

--prefix=<myinstalldir>

saat menjalankan ./configure

beberapa paket memungkinkan Anda juga mengganti ketika menjalankan:

make prefix=<myinstalldir>

namun, jika Anda tidak menggunakan ./configure, satu-satunya cara untuk mengetahui dengan pasti adalah membuka makefile dan periksa. Itu harus menjadi salah satu dari beberapa variabel pertama di atas.

Tree77
sumber
3
Anda juga harus menyadari bahwa make prefix=...mungkin menghasilkan biner dengan jalur kode yang salah, karena itu biasanya tidak dapat dimodifikasi setelah./configure --prefix=...
Tobias Kienzler
3

Jika paket menyediakan a Makefile.PL- seseorang dapat menggunakan:

perl Makefile.PL PREFIX=/home/my/local/lib LIB=/home/my/local/lib
make
make test
make install

* penjelasan lebih lanjut: https://www.perlmonks.org/?node_id=564720

eli
sumber
0

Saya mencoba solusi di atas. Tidak ada yang berhasil.

Pada akhirnya saya membuka file Makefile dan secara manual mengubah jalur awalan ke jalur instalasi yang diinginkan seperti di bawah ini.

PREFIX ?= "installation path"

Ketika saya mencoba --prefix, "make" mengeluh bahwa tidak ada input perintah seperti itu. Namun, mungkin beberapa paket menerima --prefix yang tentu saja merupakan solusi yang lebih bersih.

Majid Azimi
sumber
1
yang --prefixpilihan adalah ./configureyang Anda sebut SEBELUM make.
Gus
-7

coba gunakan INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Christopher
sumber
11
Jangan menyarankan orang "mencoba" sesuatu tanpa informasi yang menguatkan.
RichieHH
Ini seharusnya menjadi komentar.
EJoshuaS