DESTDIR và PREFIX của thực hiện


118

Tôi đang cố cài đặt phần mềm vào một thư mục cụ thể. Tôi đã tìm thấy một số cách, nhưng không chắc sự khác biệt giữa chúng là gì.

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

Tôi nhầm lẫn về chức năng của ba cái này. Họ có đạt được mục tiêu giống nhau không?

Câu trả lời:


184

./configure --prefix=***

Số 1 xác định nơi gói sẽ được cài đặt khi nó được cài đặt và nơi nó sẽ tìm kiếm các tệp liên quan khi chạy. Đó là những gì bạn nên sử dụng nếu bạn chỉ đang biên dịch một cái gì đó để sử dụng trên một máy chủ duy nhất.


make install DESTDIR=***

Số 2 là để cài đặt vào một thư mục tạm thời không phải là nơi gói sẽ được chạy. Ví dụ, điều này được sử dụng khi xây dựng debcác gói. Người xây dựng gói không thực sự cài đặt mọi thứ vào vị trí cuối cùng của nó trên hệ thống của riêng mình. Anh ta có thể đã cài đặt một phiên bản khác và không muốn làm phiền nó, hoặc anh ta thậm chí có thể không root. Vì vậy, anh ấy sử dụng

./configure --prefix=/usr

vì vậy chương trình sẽ được cài đặt /usrkhi nó chạy, sau đó

make install DESTDIR=debian/tmp

để thực sự tạo cấu trúc thư mục.


make install prefix=***

Số 3 sẽ cài đặt nó vào một nơi khác nhưng không tạo tất cả các thư mục như mong DESTDIR=/foo/bar/bazmuốn. Nó thường được sử dụng với GNU stow qua

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

, sẽ cài đặt các tệp nhị phân trong /usr/local/stow/foo/bin. Để so sánh,

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

sẽ cài đặt mã nhị phân trong /usr/local/stow/foo/usr/local/bin.


8
Đối với những gì nó đáng giá, trong một bản dựng dựa trên cmake, bạn có thể mô phỏng "trường hợp 4" (cho xếp hàng, v.v.) bằng cách chạy cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmaketrong thư mục bản dựng.
Ryan Pavlik

@JackKelly: Cảm ơn! Tôi đã sử dụng DESTDIR với GNU stow và đã phải sửa lại cấu trúc thư mục với một mv usr/local/* . && rmdir usr/local && rmdir usrthông thường - sử dụng prefix=sẽ tốt hơn nhiều!
thinkki

Lưu ý: một số phần mềm không hỗ trợ DESTDIR=/tmp/foo make install; đối với các dự án dựa trên cmake, tôi gặp nhiều may mắn hơn cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakekhi cài đặt /tmp/foo/{bin,...}; xem github.com/opencv/opencv/issues/11833#issuecomment-401164056 để làm ví dụ.
timotheecour

Một lưu ý nữa: DESTDIRprefixcó thể được sử dụng make installcùng nhau, tức là make install DESTDIR=/foo/bar/tmp perfix=/local.
albert

1

Điều này có thể giúp minh họa việc sử dụng DESTDIR--prefix(từ đây ):

Nhiều lượt cài đặt bằng --prefix và DESTDIR:

Tách biệt một vị trí / tùy chọn - tiền tố khác nhau cho mỗi bản dựng - tại thời điểm định cấu hình. Ví dụ:

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

Trong trường hợp tệp ./configure không được cung cấp, người ta vẫn có thể cài đặt vào thư mục dành riêng cho người dùng bằng cách sử dụng: make prefix = / path / to / your / lib / libaio install
Good Will

0

Từ openssl/INSTALL

Người xây dựng gói muốn định cấu hình thư viện cho các vị trí tiêu chuẩn nhưng đã cài đặt gói ở một nơi khác để có thể dễ dàng đóng gói, có thể sử dụng

$ make INSTALL_PREFIX=/tmp/package-root install

(hoặc chỉ định "--install_prefix = / tmp / package-root" làm tùy chọn cấu hình). Tiền tố được chỉ định sẽ được thêm vào trước tất cả các tên tệp mục tiêu cài đặt.

Đây không phải là tiêu chuẩn nhưng INSTALL_PREFIX được sử dụng trong một số chương trình khác.

Điều này hoạt động cho các phiên bản OpenSSL trước 1.1.x. OpenSSL 1.1.x trở lên có thể nhận dạng bình thường DESTDIR.

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.