DESTDIR 및 PREFIX of make


118

특정 디렉토리에 소프트웨어를 설치하려고합니다. 여러 가지 방법을 찾았지만 그 차이점이 무엇인지 잘 모르겠습니다.

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

이 세 가지 기능에 대해 혼란 스럽습니다. 그들은 같은 목표를 달성합니까?

답변:


184

./configure --prefix=***

숫자 1 은 패키지가 설치 될 때 이동할 위치와 실행될 때 연관된 파일을 찾을 위치를 결정합니다. 단일 호스트에서 사용하기 위해 무언가를 컴파일하는 경우 사용해야합니다.


make install DESTDIR=***

2 번은 패키지가 실행될 곳이 아닌 임시 디렉토리에 설치하기위한 것입니다. 예를 들어 이것은 deb패키지를 빌드 할 때 사용됩니다 . 패키지를 만드는 사람은 실제로 모든 것을 자신의 시스템의 최종 위치에 설치하지 않습니다. 이미 다른 버전이 설치되어있어 방해하고 싶지 않거나 루트가 아닐 수도 있습니다. 그래서 그는

./configure --prefix=/usr

따라서 프로그램이 /usr실행될 때 설치 될 것으로 예상 됩니다.

make install DESTDIR=debian/tmp

실제로 디렉터리 구조를 만듭니다.


make install prefix=***

3 번은 다른 위치에 설치하지만 모든 디렉토리를 만들지는 않습니다 DESTDIR=/foo/bar/baz. 일반적으로 GNU stow via

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

, 바이너리를 /usr/local/stow/foo/bin. 이에 비해

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

바이너리를 /usr/local/stow/foo/usr/local/bin.


8
그만한 가치는 cmake 기반 빌드 cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake에서 빌드 디렉토리에서 실행 하여 "case 4"(스토우 등의 경우)를 에뮬레이트 할 수 있습니다 .
Ryan Pavlik 2012 년

@ JackKelly : 감사합니다! 저는 GNU stow와 함께 DESTDIR을 사용해 왔으며 mv usr/local/* . && rmdir usr/local && rmdir usr일반적으로 디렉토리 구조를 수정해야했습니다. 사용하는 prefix=것이 훨씬 좋습니다!
thinkski

참고 : 일부 소프트웨어는 지원하지 않습니다 DESTDIR=/tmp/foo make install. cmake 기반 프로젝트를 위해, 나는 더 많은 행운을 가지고 cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmake있는에 설치를 /tmp/foo/{bin,...}; 예제는 github.com/opencv/opencv/issues/11833#issuecomment-401164056 을 참조하십시오 .
timotheecour

한 가지 더 참고 : DESTDIR및 함께 prefix사용할 수 있습니다 . make installmake install DESTDIR=/foo/bar/tmp perfix=/local
albert

1

이는 DESTDIR--prefix( 여기에서 ) 사용을 설명하는 데 도움이 될 수 있습니다 .

--prefix 및 DESTDIR을 사용한 다중 설치 :

구성시 각 빌드에 대해 다른-접두사 위치 / 옵션을 구분합니다. 예 :

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

./configure 파일이 제공되지 않은 경우에도 다음을 사용하여 사용자 별 디렉토리에 설치할 수 있습니다. make prefix = / path / to / your / lib / libaio install
Good Will

0

에서 openssl/INSTALL

표준 위치에 대해 라이브러리를 구성하고 싶지만 패키지를 쉽게 패키징 할 수 있도록 다른 곳에 패키지를 설치 한 패키지 빌더는 다음을 사용할 수 있습니다.

$ make INSTALL_PREFIX=/tmp/package-root install

(또는 구성 옵션으로 "--install_prefix = / tmp / package-root"지정). 지정된 접두사는 모든 설치 대상 파일 이름 앞에 추가됩니다.

이것은 비표준이지만 INSTALL_PREFIX는 다른 프로그램에서 사용됩니다.

이것은 1.1.x 이전의 OpenSSL 버전에서 작동합니다. OpenSSL 1.1.x 이상은 일반적인 DESTDIR.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.