사용자 정의 종속성이 있는 Nix 셸

사용자 정의 종속성이 있는 Nix 셸

shell.nix 이제 내가 작업 중인 프로젝트의 기본 사항을 작성하는 방법을 이해했습니다 . 나는 다음과 같은 것을 가지고 있습니다 :

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  nativeBuildInputs = with pkgs; [ 
    cmake
    boost
    eigen
  ];
}

그러나 이 프로젝트는 다른 패키지(예: cln)에도 의존하므로 git 저장소에서 소스 코드를 다운로드하고 몇 가지 특수 플래그를 사용하여 컴파일해야 합니다. 이 패키지는 autoconf일부 옵션을 활성화/비활성화하기만 하면 됩니다. 나는 이것을 달성하는 방법을 모른다 shell.nix. 다음은 다양한 Google 검색을 통해 정리한 현재 시도입니다. 작동하지 않으며 문제를 해결하는 방법(또는 도움말을 검색하는 방법)을 모르겠습니다.

with import <nixpkgs> {};

stdenv.mkDerivation {    # this line causes an error
  name = "cln-m1";
  src = fetchurl {
    url = "https://www.ginac.de/CLN/cln-1.3.6.tar.bz2";
  };    # I also want to pass some flags to "configure" here
}

pkgs.mkShell {
  nativeBuildInputs = with pkgs; [ 
    cmake
    boost
    eigen
    cln-m1    # this is the customized package I want to add
  ];
}

stdenv.mkDerivation...이 코드는 다음 줄에서 오류가 발생하기 때문에 작동하지 않습니다 .

오류: 함수가 아닌 컬렉션을 호출하려고 합니다.

나는 이 문제를 수정하고 스크립트를 빌드하기 전에 일부 플래그를 스크립트에 전달 configure하고 cln 사용자 정의 플래그 cln( cln-m1)를 이 셸에 대한 종속성으로 사용할 수 있기를 원합니다.

답변1

글쎄, 그것은 기본적인 함수형 프로그래밍과 같습니다.

with import <nixpkgs> {};
let
  cln-m1 = stdenv.mkDerivation {    # this line causes an error
    name = "cln-m1";
    src = fetchurl {
      url = "https://www.ginac.de/CLN/cln-1.3.6.tar.bz2";
    };    # I also want to pass some flags to "configure" here
  };

in pkgs.mkShell {
  nativeBuildInputs = with pkgs; [ 
    cmake
    boost
    eigen
    cln-m1    # this is the customized package I want to add
  ];
}

관련 정보