2017-09-13 129 views
2

我已經使用stack構建工具安裝了ghc。它編譯我的項目。但是,當我進入nix-shell項目目錄中,並希望從nix-shell編譯項目中,我看到的錯誤是這樣的:如何使用已安裝的ghc與nix-shell中的堆棧?

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

這可以通過運行stack setup命令是固定的。但我擔心這會再次安裝ghc在我的機器上耗費更多空間等等。有沒有辦法使用已安裝的ghc for nix-shell而不運行stack setup命令?

+0

我對'nix'一無所知,但是運行'stack setup'的AFAIK不會重新下載GHC的一個版本,如果這個版本已經被下載到你的計算機的某個地方的話。 Stack儘可能地嘗試在項目之間共享下載。 – Alec

+0

現在,堆棧想要使用自己的ghc,除非在config.yaml/stack.yaml中指定了'--system-ghc'或'system-ghc:true'。所以,我建議在'config.yaml'中放入'system-ghc:true'。 – mgsloan

+0

@mgsloan感謝您的諮詢!可能這是解決方案。同時考慮在'PATH'中添加'ghc'。 – Shersh

回答

1

我不知道你如何設置你的項目,但可能最簡單(但有限)的方法是使用堆棧的nix integration,它將使用GHC和來自nix的本機依賴項。

不幸的是,堆棧nix集成是相當倒退。它不使用nix來構建你的包,只是爲了創建一個GHC和本地依賴的環境。您必須使用堆棧本身來構建項目,並且由於堆棧將運行cabal,所以它仍然可以使用該標誌。堆棧nix集成不會生成一個.nix文件,依賴關係由堆棧解析,因此您無法使用nix-build來構建項目,並且在輸入nix-shell時沒有意義。你將不得不使用像stack2nixstackage2nix這樣的工具。

所以:用stack --nix build構建,棧應該使用nix來設置GHC和本地依賴。

當你準備好嚴重的企業(如自動構建和部署),看看stack2nixstackage2nix,使用它們的依賴凍結成nix文件,然後構建和部署nix-buildnix-copy-closure