Skip to content

일반 빌더 문법

GNU Hello 빌드 스크립트를 상기해보면 아래와 같았습니다:

PATH=$perl/bin:$PATH
tar xvfz $src
cd hello-*
./configure --prefix=$out
make
make install

거의 모든 유닉스 패키지를 위한 빌더는 이렇게 생겼습니다 - 일부 환경 변수를 설정하고, 소스 코드를 압축 해제하고, configure, 빌드, 설치 과정을 가집니다. 이런 이유로 표준 환경은 이런 빌드 과정을 자동화 할 수 있는 일부 배쉬 함수를 제공합니다. 여기에 일반 빌드 도구를 사용하는 빌더의 모습을 소개합니다:

buildInputs="$perl"source $stdenv/setup ②

genericBuild ③

각 줄이 의미하는 바는 다음과 같습니다:

  1. buildInputs 변수는 setup에게 지시된 패키지를 "인풋"으로 사용하라고 명령합니다. 이는 만약 패키지가 bin 하위 디렉터리를 제공하는 경우, 그것이 PATH에 추가됨을 의미합니다; 만약 include 하위 디렉터리가 있으면, GCC의 헤더 탐색 경로에 추가됩니다; 등등. (이 기능은 모듈식 방법으로 실현되어 있습니다: setup은 모든 의존성의 pkg/nix-support/setup-hook 파일을 참고하기 위해 시도됩니다. 이 "셋업 훅"은 원하는 어떤 환경 변수든지 설정할 수 있습니다; 예를 들어, Perl 세트의 셋업 훅은 PERL5LIB 환경 변수를 모든 인풋의 lib/site_perl 디렉터리에 포함하도록 설정합니다.)

  2. genericBuild 함수는 파일 $stdenv/setup에 정의되어 있습니다.up`.

  3. 마지막 단계는 쉘 함수 genericBuild를 호출하는데, 이는 이전 빌드 스크립트에서 명시적으로 완료된 단계들을 수행합니다. 일반 빌더는 소스를 gzip, bzip2 등 중에 어떤 것으로 압축 해제 해야하는지 알아낼 정도로 똑똑합니다. 이는 여러 방식으로 수정될 수 있습니다; Nixpkgs 매뉴얼을 참조하세요.

이미 알아차린 독자들도 있겠지만 buildInputs는 닉스 표현식에서 설정될 수도 있습니다. 아래와 같습니다:

  buildInputs = [ perl ];

perl 특성은 삭제될 수 있고, 빌더는 더 짧아집니다:

source $stdenv/setup
genericBuild

사실, mkDerivation은 완벽히 위와 같은 기본 빌더를 제공하기 때문에 Hello에 있어서는 빌더 자체를 생략하는 것마저도 가능합니다.


Last update: November 4, 2021
Back to top