각 단계마다 다른 일을하기 때문에
건물 환경 준비 (설정)
./configure
이 스크립트에는 변경해야하는 많은 옵션이 있습니다. 좋아요 --prefix
또는 --with-dir=/foo
. 이는 모든 시스템이 다른 구성을 가지고 있음을 의미합니다. 또한 ./configure
설치해야하는 누락 된 라이브러리를 확인합니다. 여기에 잘못된 것이 있으면 응용 프로그램을 빌드하지 않습니다 . 그렇기 때문에 모든 배포판은 특정 라이브러리와 파일을 특정 디렉토리에 설치하는 것이 더 낫다고 생각하기 때문에 배포판에는 다른 위치에 설치된 패키지가 있습니다. run이라고 ./configure
하지만 실제로는 항상 변경해야합니다.
예를 들어 Arch Linux 패키지 사이트를 살펴보십시오 . 여기에서 모든 패키지가 다른 구성 매개 변수를 사용하는 것을 볼 수 있습니다 (빌드 시스템에 autotools를 사용한다고 가정).
시스템 구축
make
이것은 실제로 make all
기본입니다. 그리고 모든 메이크는 할 일이 다릅니다. 일부는 빌드하고, 일부는 빌드 후 테스트를, 일부는 외부 SCM 저장소에서 체크 아웃합니다. 일반적으로 매개 변수를 제공 할 필요가 없지만 일부 패키지는 매개 변수를 다르게 실행합니다.
시스템에 설치
make install
이렇게하면 configure로 지정된 위치에 패키지가 설치됩니다. 원하는 경우 ./configure
홈 디렉토리를 가리 키도록 지정할 수 있습니다 . 그러나 많은 구성 옵션이 /usr
또는을 가리키고 있습니다 /usr/local
. 즉, sudo make install
루트 만 / usr 및 / usr / local에 파일을 복사 할 수 있기 때문에 실제로 사용해야 합니다.
이제 각 단계가 다음 단계의 사전 요구 사항임을 알 수 있습니다. 각 단계는 문제없는 흐름에서 작업을 수행하기위한 준비입니다. 배포판은이 은유를 사용하여 패키지 (RPM, deb 등)를 빌드합니다.
여기에서 각 단계가 실제로 다른 상태임을 알 수 있습니다. 이것이 패키지 관리자가 다른 래퍼를 갖는 이유입니다. 다음은 한 단계로 전체 패키지를 빌드 할 수있는 래퍼의 예입니다. 그러나 각 응용 프로그램에는 서로 다른 래퍼가 있습니다 (실제로 이러한 래퍼에는 spec, PKGBUILD 등과 같은 이름이 있음) :
def setup:
... #use ./configure if autotools is used
def build:
... #use make if autotools is used
def install:
... #use make all if autotools is used
여기서 autotools, 즉 ./configure
, make
및 make install
. 그러나 다른 하나는 SCons, Python 관련 설정 또는 다른 것을 사용할 수 있습니다.
보시다시피 각 상태를 분할하면 특히 패키지 관리자 및 배포자에게 유지 관리 및 배포가 훨씬 쉬워집니다.