2012-07-03 2 views
77

특정 디렉토리에 소프트웨어를 설치하려고합니다. 여러 가지 방법을 찾았지만 그 차이점은 무엇인지 모릅니다. make의 DESTDIR 및 PREFIX

  • make install prefix=***make install --prefix=***
  • make install DESTDIR=***./configure --prefix=***
    1. 나는이 네 가지의 기능에 대한 혼란 스러워요. 그들은 같은 목표를 달성합니까?

  • +0

    두 번째로는 확실하지 않습니다. 어떤 페이지에는 "make install PREFIX"라고 쓰여지는 반면, 다른 페이지에서는 "make prefix prefix"와 "make install --prefix"라고 쓰여 있습니다. 나는 아직 그들을 시도하지 않았다. – Sean

    +2

    'make install prefix = ...', [설치 디렉토리의 변수] (https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#Directory-Variables)를 참조하십시오. – Ggicci

    +0

    make에 내장되어 있습니다. 첫 번째는 분명 make와 아무런 관련이 없습니다. 두 번째는 유효하지 않습니다. 세 번째는 makefile이 DESTDIR을 사용하도록 작성된 경우에만 작동합니다. 일부 메이크 파일은 DESTDIR을 지원하지 않거나 다른 이름 (INSTALL_ROOT 또는 INSTALL_PREFIX 등)을 사용합니다. – davmac

    답변

    122

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


    수 2은 내가 아는 단순히 오류입니다.


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

    ./configure --prefix=/usr 
    

    를 사용하여 실제로 디렉토리 구조를 생성 한 후,

    make install DESTDIR=debian/tmp 
    

    을 실행할 때 그래서 프로그램은 /usr에 설치 될 것으로 예상됩니다.


    수 4 다른 장소에 설치하지만 DESTDIR=/foo/bar/baz이처럼 모든 디렉토리를 생성 할 것입니다. 그것은 일반적으로 /usr/local/stow/foo/bin에 바이너리를 설치합니다

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

    통해 GNU의 스토우와 함께 사용됩니다. 이에 비해

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

    /usr/local/stow/foo/usr/local/bin에 바이너리를 설치합니다. 그게 아마도 2 번 일 것입니다.

    +38

    아주 좋은 답변입니다.네 번째 경우는 묻지 않습니다 :'make install prefix =/foo/bar/baz'. 그것은 다른 장소에 설치 하겠지만'DESTDIR =/foo/bar/baz'와 같이 모든 디렉토리를 만들지는 않을 것입니다. 이것은/usr/local/stow /에있는 바이너리를 설치할'./configure --prefix =/usr/local && make && sudo make install prefix =/usr/local/stow/foo'를 통해 GNU stow와 함께 사용됩니다. foo/bin'. ('make install DESTDIR =/usr/local/stow/foo'는'/ usr/local/stow/foo/usr/local/bin'에 바이너리를 설치합니다.) –

    +6

    빌드 기반 디렉토리에서'cmake -DCMAKE_INSTALL_PREFIX =/foo/bar/baz -P cmake_install.cmake'를 실행하여 "케이스 4"(stow 등)를 에뮬레이션 할 수 있습니다. –

    +0

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

    관련 문제