답변:
./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
.
mv usr/local/* . && rmdir usr/local && rmdir usr
일반적으로 디렉토리 구조를 수정해야했습니다. 사용하는 prefix=
것이 훨씬 좋습니다!
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 을 참조하십시오 .
DESTDIR
및 함께 prefix
사용할 수 있습니다 . make install
make install DESTDIR=/foo/bar/tmp perfix=/local
이는 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
에서 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
.
cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmake
에서 빌드 디렉토리에서 실행 하여 "case 4"(스토우 등의 경우)를 에뮬레이트 할 수 있습니다 .