2017-09-13 1 views
2

stack 빌드 도구를 사용하여 ghc을 이미 설치했습니다. 그것은 내 프로젝트를 컴파일합니다. 내가 프로젝트 디렉토리 안에 nix-shell를 입력하고 nix-shell에서 내 프로젝트를 컴파일 할 때 나는이 같은 오류를 참조하십시오nix-shell 안에 이미 설치된 ghc를 스택과 함께 사용하는 방법은 무엇입니까?

No compiler found, expected minor version match with ghc-8.0.2 

이는 stack setup 명령을 실행하여 해결할 수 있습니다. 그러나 이것이 ghc을 다시 한번 설치하는 것에 대해 걱정이됩니다. 내 컴퓨터 등에 더 많은 공간을 소비해야합니다. 명령을 실행하지 않고 nix-shell에 이미 설치된 ghc을 사용할 방법이 있습니까?

+0

'nix'에 대해서는 아무 것도 모르지만 AFAIK는'stack setup'을 실행해도 GHC 버전이 이미 컴퓨터의 어딘가에 다운로드 되었다면 GHC 버전을 다시 다운로드하지 않습니다. 스택은 가능한 한 프로젝트간에 다운로드를 공유하려고 시도합니다. – Alec

+0

요즘 스택은'--system-ghc'가 전달되거나 config.yaml/stack.yaml에'system-ghc : true'가 지정되어 있지 않으면 자체 ghc를 사용하려고합니다. 그래서'config-yaml'에'system-ghc : true'를 넣어 두는 것이 좋습니다. – mgsloan

+0

@mgsloan 귀하의 조언에 감사드립니다! 아마도 이것은 해결책입니다. 또한'ghc'를'PATH'에 추가하는 것을 고려합니다. – Shersh

답변

1

프로젝트를 어떻게 설정했는지 모르겠지만 아마도 가장 쉬운 (그러나 제한적인) 방법은 GHC와 고유 종속성을 사용하는 nix integration 스택을 nix에서 사용하는 것입니다.

불행히도, 스택 nix 통합은 오히려 거꾸로입니다. GHC와 네이티브 의존성을 가진 환경을 만들기 위해 패키지를 빌드하는 데 nix를 사용하지 않습니다. 스택 자체를 사용하여 프로젝트를 빌드해야하며 스택은 캐럴을 실행하므로 플래그로도 계속 작동해야합니다. 스택 nix 통합 스택에 의해 해결 된 종속성 가진 .nix 파일을 생성하지 않으므로 nix-build 함께 프로젝트를 빌드 할 수 없습니다 및 nix-shell 입력 지점이 없습니다. 이 경우 stack2nix 또는 stackage2nix과 같은 도구를 사용해야합니다.

따라서 : stack --nix build으로 빌드하고 스택은 nix를 사용하여 GHC 및 기본 종속성을 설정해야합니다. 당신이 심각한 사업 (같은 자동화 된 빌드 및 배포), 구축 및 nix-build로 배포 그런 다음 nix 파일에 종속성을 동결하는 데 사용할, stack2nix 또는 stackage2nix 조사에 대한 준비가

nix-copy-closure

관련 문제