Zrobić instalację, ale nie w domyślnych katalogach?

148

Chcę uruchomić „make install”, więc mam wszystko, czego potrzebuję, ale chciałbym, aby instalował rzeczy w ich własnym folderze, a nie w systemie / usr / bin itp. Czy to możliwe? nawet jeśli odwołuje się do narzędzi w / usr / bin itp.?

Jon Phenow
źródło
3
Jeśli masz już skompilowany projekt i uruchomiłeś ./configure bez prefiksu i chcesz zainstalować go w niestandardowej ścieżce, zobacz stackoverflow.com/a/17679654/313113
bitek

Odpowiedzi:

213

To zależy od pakietu. Jeśli plik Makefile jest generowany przez GNU autotools ( ./configure), zwykle możesz ustawić lokalizację docelową w następujący sposób:

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

Jeśli plik Makefile nie jest generowany przez autotools, ale rozprowadzany wraz z oprogramowaniem, po prostu otwórz go w edytorze i zmień. Katalog docelowy instalacji jest prawdopodobnie zdefiniowany gdzieś w zmiennej.

Tomasz
źródło
9
nie powinien make && make installprzestrzegać klauzuli configure?
nass
1
Problem, z którym mam, --prefixpolega na tym, że jeśli stringspóźniej uruchomisz a na wynikowym pliku binarnym, zobaczysz, że ścieżka jest przechowywana w środku. Nie wiem, dlaczego tak się dzieje, ale z pewnością nie chcę, aby moje ścieżki maszynowe w plikach binarnych były wysyłane do innych użytkowników.
Erik Aigner
Erik, wygląda na to, że będą odniesienia do ścieżki, którą i tak utworzysz, jeśli budujesz ze źródła.
Konstantin Rybakov
44

Ponieważ nie wiesz, której wersji automake możesz użyć zmiennej środowiskowej DESTDIR .
Zobacz Makefile, aby się upewnić.

Na przykład:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install
Andor
źródło
9
Działa to, gdy uruchomiłeś konfigurację bez argumentu wiersza poleceń --prefix i już zbudowałeś projekt, ale nie chcesz go instalować w domyślnych lokalizacjach, ale zamiast tego określ niestandardową ścieżkę instalacji. Spowoduje to dołączenie domyślnej ścieżki usr / local / bin / do DESTDIR, a projekt zostanie zainstalowany w $ HOME / Software / LocalInstall / usr / local / bin /
bitek.
To genialne rozwiązanie. Nie wiem, dlaczego nie jest to wybrana odpowiedź! Prawie wszystkie inne odpowiedzi wymagają ponownej konfiguracji, co oznacza, że ​​należy również ponownie skonfigurować. Wyobraź sobie, że skompilowałeś po 2 ~ 3 godzinach całą superkonstrukcję MITK, a następnie poproszono mnie o ponowne wykonanie, tylko dlatego, że chcę zainstalować skompilowane pliki w innej lokalizacji. To wspaniała metoda uniknięcia takiej sytuacji.
Duck Dodgers
23
make DESTDIR=./new/customized/path install

To szybkie polecenie zadziałało dla mnie w przypadku instalacji opencv w wersji 3.2.0 na Ubuntu 16. Ścieżka DESTDIR może być względna lub bezwzględna.

Takie przekierowanie może być również przydatne w przypadku, gdy użytkownik nie ma uprawnień administratora, o ile lokalizacja DESTDIR ma uprawnienia dostępu dla użytkownika. np. / home //

samasat
źródło
1
może być również konieczne zastąpienie PREFIX, jeśli ma domyślną wartość w pliku makefile
Mark Ch
17

Może to zależeć od tego, co jest obsługiwane przez moduł, który próbujesz skompilować. Jeśli plik makefile jest generowany przy użyciu narzędzi automatycznych, użyj:

--prefix=<myinstalldir>

podczas uruchamiania pliku ./configure

niektóre pakiety pozwalają na nadpisanie podczas pracy:

make prefix=<myinstalldir>

jednakże, jeśli nie używasz ./configure, jedynym sposobem na upewnienie się, jest otwarcie pliku makefile i sprawdzenie. Powinna to być jedna z pierwszych kilku zmiennych na górze.

Drzewo77
źródło
3
Należy również mieć świadomość, że make prefix=...może doprowadzić do plików binarnych z niewłaściwych ścieżek zakodowane, ponieważ te zazwyczaj nie mogą być modyfikowane po./configure --prefix=...
Tobias Kienzler
0

Wypróbowałem powyższe rozwiązania. Żaden nie działał.

W końcu otworzyłem plik Makefile i ręcznie zmieniłem ścieżkę prefiksu na żądaną ścieżkę instalacji, jak poniżej.

PREFIX ?= "installation path"

Kiedy próbowałem --prefix, "make" narzekał, że nie ma takiego wejścia poleceń. Jednak być może niektóre pakiety akceptują --prefix, co jest oczywiście czystszym rozwiązaniem.

Majid Azimi
źródło
1
jest to --prefixopcja, do ./configurektórej dzwonisz PRZED make.
Gus
-7

spróbuj użyć INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY
Krzysztof
źródło
11
Nie sugeruj ludziom „spróbowania” czegoś bez żadnych potwierdzających informacji.
RichieHH
To powinien być komentarz.
EJoshuaS - Przywróć Monikę