2017-09-13 5 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をもう一度インストールしてしまうのではないかと心配しています。コマンドを実行しないで、すでにghcnix-shellにインストールして使用する方法はありますか?

+0

私は 'nix'について何も知らないが、AFAIKは' stack setup'を実行しても、あなたのコンピュータのどこかにそのバージョンが既にダウンロードされていればGHCのバージョンを再ダウンロードしません。スタックはプロジェクト間でダウンロードをできるだけ共有しようとします。 – Alec

+0

最近、 '--system-ghc'が渡されたり、' system-ghc:true'がconfig.yaml/stack.yamlで指定されていない限り、スタックは独自の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など

関連する問題