5

実行するcabal buildと、Haskell コンパイラを使用して、実行可能ファイルやテスト スイートを .cabal ファイルにビルドします。

さまざまなターゲットにどのコンパイラを使用するかを制御できますか? 理想的には、同じ.cabalファイルで ghc と ghcjs を使用する個別のビルド ターゲットが必要です。誰かが同じプロジェクトでghcとhugsまたはghcの2つのバージョンを使いたいと思うかもしれません。これは現在可能ですか?

また、cabal は実行時に使用するコンパイラをどのように決定しcabal buildますか? ~/.cabal/configファイルにコンパイラ オプションがあることを確認しましたが、それを からghcに変更しghcjsてコメントを外しても、機能が変わるようには見えませんでしたcabal build

4

1 に答える 1

4

使用するコンパイラーは、構成ステップ (または、構成オプションを前の構成ステップと共有しないインストール・ステップの暗黙的な構成ステップ) 中に決定されます。また、パッケージを作成するエンティティによって決定され、パッケージの作成者によって影響を受けることはありません。おそらく、あなたに起こったことは、以前の cabal ビルドが暗黙的に構成ステップを呼び出し、コンパイラーを選択したことです。将来のビルドでは、グローバル構成ファイルに残っているコンパイラよりも以前のコンパイラの選択が保持されます。手動でcabal configure再度実行するだけで、それを取り消すことができます。

間違った実装でビルドが失敗する可能性があります。

library
    if impl(ghc)
        buildable: False

cabal が GHC を使用してパッケージをビルドしようとするのを防ぎます。ただし、cabal はパッケージ全体を単一のコンパイラでビルドできない限り、パッケージのインストールを拒否するため、パッケージの個別の部分を個別のコンパイラでビルドする場合には、これはあまり役に立ちません。

おそらく最善の方法は、個別のコンパイラでビルドする必要があるものに対して個別のパッケージを作成することです。

于 2015-01-21T17:27:38.420 に答える