Thực hiện cài đặt, nhưng không vào thư mục mặc định?


148

Tôi muốn chạy 'make install' để tôi có mọi thứ tôi cần, nhưng tôi muốn nó cài đặt những thứ trong thư mục riêng của họ trái ngược với / usr / bin của hệ thống, v.v. ngay cả khi nó tham chiếu các công cụ trong / usr / bin, v.v.?


3
Nếu bạn đã xây dựng dự án và bạn đã chạy ./mình không có tiền tố và bạn muốn cài đặt nó trong một đường dẫn tùy chỉnh, hãy xem stackoverflow.com/a/17679654/313113
cắn

Câu trả lời:


212

Nó phụ thuộc vào gói. Nếu Makefile được tạo bởi GNU autotools ( ./configure), bạn thường có thể đặt vị trí đích như sau:

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

Nếu Makefile không được tạo bởi autotools, nhưng được phân phối cùng với phần mềm, chỉ cần mở nó trong trình chỉnh sửa và thay đổi nó. Thư mục đích cài đặt có thể được xác định trong một biến ở đâu đó.


9
không nên make && make installtuân theo mệnh đề configure?
NASS

1
Vấn đề tôi gặp phải --prefixlà nếu bạn chạy a stringstrên nhị phân kết quả sau đó, bạn sẽ thấy rằng đường dẫn được lưu trữ bên trong. Tôi không biết tại sao điều này xảy ra, nhưng tôi chắc chắn không muốn đường dẫn máy của mình vào các tệp nhị phân mà tôi gửi cho người dùng khác.
Erik Aigner

Erik, có vẻ như sẽ có các tham chiếu đến đường dẫn bạn chạy thực hiện, nếu bạn xây dựng từ nguồn.
Konstantin Rybakov

44

Vì không biết phiên bản tự động nào, bạn có thể sử dụng biến môi trường DESTDIR .
Xem Makefile để chắc chắn.

Ví dụ:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install

9
Điều này hoạt động khi bạn chạy cấu hình mà không có đối số dòng lệnh --prefix và bạn đã xây dựng dự án nhưng bạn không muốn cài đặt nó ở các vị trí mặc định mà thay vào đó chỉ định đường dẫn cài đặt tùy chỉnh. Điều này sẽ nối đường dẫn usr / local / bin / mặc định vào DESTDIR và dự án của bạn sẽ được cài đặt vào $ HOME / Software / LocalInstall / usr / local / bin /
cắn

Đây là một giải pháp tuyệt vời. Tôi không biết tại sao đây không phải là câu trả lời được chọn! Gần như tất cả các câu trả lời khác yêu cầu cấu hình lại, có nghĩa là người ta cũng cần phải thực hiện lại. Hãy tưởng tượng bạn đã biên dịch sau 2 ~ 3 giờ toàn bộ siêu máy tính MITK và sau đó được yêu cầu làm lại, chỉ vì tôi muốn cài đặt các tệp đã biên dịch vào một vị trí khác. Đây là một công việc tuyệt vời xung quanh để tránh tình trạng đó.
Vịt Dodgers

23
make DESTDIR=./new/customized/path install

Lệnh nhanh này đã giúp tôi cài đặt opencv phát hành 3.2.0 trên Ubuntu 16. Đường dẫn DESTDIR có thể tương đối cũng như tuyệt đối.

Chuyển hướng như vậy cũng có thể hữu ích trong trường hợp người dùng không có quyền quản trị miễn là vị trí DESTDIR có quyền truy cập phù hợp cho người dùng. vd / nhà //


1
cũng có thể cần ghi đè PREFIX nếu nó có giá trị mặc định bên trong tệp thực hiện
Đánh dấu

17

Nó có thể phụ thuộc vào những gì được hỗ trợ bởi mô-đun bạn đang cố gắng biên dịch. Nếu tệp tạo tệp của bạn được tạo bằng cách sử dụng tự động, hãy sử dụng:

--prefix=<myinstalldir>

khi chạy ./mình

một số gói cho phép bạn ghi đè khi chạy:

make prefix=<myinstalldir>

tuy nhiên, nếu bạn không sử dụng ./mình, chỉ có một cách để biết chắc chắn là mở tệp Makefile và kiểm tra. Nó phải là một trong vài biến đầu tiên ở trên cùng.


3
bạn cũng nên lưu ý rằng make prefix=...có thể dẫn đến nhị phân với các đường dẫn được mã hóa sai, vì chúng thường không thể được sửa đổi sau./configure --prefix=...
Tobias Kienzler


0

Tôi đã thử các giải pháp trên. Không có làm việc.

Cuối cùng, tôi đã mở tệp Makefile và thay đổi thủ công đường dẫn tiền tố thành đường dẫn cài đặt mong muốn như bên dưới.

PREFIX ?= "installation path"

Khi tôi thử --prefix, "make" phàn nàn rằng không có đầu vào lệnh như vậy. Tuy nhiên, có lẽ một số gói chấp nhận --prefix tất nhiên là một giải pháp sạch hơn.


1
các --prefixlựa chọn là để ./configuremà bạn gọi TRƯỚC make.
Gus

-7

thử sử dụng INSTALL_ROOT.

make install INSTALL_ROOT=$INSTALL_DIRECTORY

11
Đừng đề nghị mọi người "thử" một cái gì đó mà không có bất kỳ thông tin chứng thực nào.
RichieHH

Điều này nên là một nhận xét.
EJoshuaS - Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.