2011-07-15 11 views
19

私はこのHaskellプロジェクトに取り組んできました。私はそのためのファイルを持っています。今、私のプロジェクトは単純なインタプリタを実装するライブラリとして構成されています。私はまた、ライブラリを呼び出すための実行可能ファイルにビルドする必要がある非常に短いメインファイルを持っています。私は何をしたいです:このキャバルファイルで再コンパイルしないようにするにはどうすればよいですか?

1)ライブラリをコンパイルし

2モジュールの一部を露出する)私は動作し、これを行うように見える秘密結社ファイルを持っている実行可能

をコンパイルします。問題は、実行可能ファイルをコンパイルするときに、は、ステップ(1)で既にコンパイルされたすべてのモジュールを再コンパイルすることです。。私はそれがなぜこれをするのかよく分かりません - それを止める方法はありますか?

cabalは同じディレクトリにcabalファイルを持っているのが好きではないようで、実際に別のプロジェクトファイルを作成する必要はありません。基本的には1つのファイルをコンパイルするだけなので、2番目のステップです。あなたの実行可能セクションで

cabal-version:  >= 1.6 
build-type:   Simple 
name:    HaSC 
version:   0.2.3 
license:   OtherLicense 
category:   Language 
author:    Chris B 
maintainer:   Chris B 
copyright:   Chris B 2010 - 2011 
synopsis:   (HA)skell (S)ound (C)hange applier (HaSC) library 
description:  HaSC implements a little language for applying sound changes to words 
homepage:   http://www.chrisdb.me.uk/redmine/projects/haskell-sound-change 
stability:   Alpha 
data-files:   doc/HaSCDoc.pdf 
license-file:  LICENSE 

library 
    build-depends: 
     base >= 4.3, 
     containers >= 0.3, 
     parsec >= 3, 
     parallel >= 3.1, 
     deepseq >= 1.1, 
     mtl >= 1.1, 
     transformers >= 0.2, 
     text >= 0.10, 
     text-icu >= 0.6.3, 
     pretty >= 1, 
     directory >= 1.1, 
     filepath >= 1.2 
    hs-source-dirs: src 
    exposed-modules: HaSC.IO.Disk, 
        HaSC.IO.Memory, 
        HaSC.Exec 
    other-modules: HaSC.AST, 
        HaSC.IO, 
        HaSC.IdentMap, 
        HaSC.Parse, 
        HaSC.Regex, 
        HaSC.Representation,      
        HaSC.Transformations, 
        HaSC.Search, 
        HaSC.State 

executable HaSC 
    GHC-Options: -rtsopts 
    hs-source-dirs: src 
    main-is:   Main.hs  

答えて

20

、実行ファイルがライブラリに依存するようBuild-Dependsにライブラリを追加します。

実行ファイル(および実行可能ファイルに固有の他のソースファイル)のMain.hsを別のサブディレクトリに移動し、別のサブディレクトリに移動して別のHs-Source-Dirsを指定する必要がありますライブラリモジュールを同じフォルダに置くことによって、

executable HaSC 
    Build-Depends: HaSC 
    Main-Is: Main.hs 
    Hs-Source-Dirs: foo -- Directory you moved Main.hs to 

これを機能させるには、Cabal-Version >= 1.8を指定する必要があります。詳細については、Cabal ticket #89を参照してください。

+0

ありがとうございました。それは今働く。 – chrisdb

+0

ああ、これはどのように実行ファイルを同じキャバルファイルのライブラリに依存させるかです。 – nh2

+3

このような状況に適したプロジェクトレイアウトについては、[runhaskell/ghciで実行されるライブラリ+実行可能ファイルを使用したHaskellカバールプロジェクトの作成方法](http://stackoverflow.com/questions/12305970/how-to- make-a-haskell-cabal-project-with-libraryexecutables-that-still-run-with)を使用します。 – nh2

関連する問題