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
];
}