2012-07-31 17 views
10

私はYesodを使用してWebサイトで作業しています。正常なビルドを実行していますが、データベースを確実に埋め込むことができません。私は、データベースを移入二Haskellのプログラムを持っていると私はこのように私の秘密結社のファイルにそれを追加しました:Cabal複数の実行可能ファイル

executable   program 
    if flag(library-only) 
    Buildable: False 

    main-is:   ../main.hs 
    hs-source-dirs: dist 
    build-depends:  base 
        , myproject 
        , yesod-default 

executable   init 
    if flag(library-only) 
    Buildable: False 

    main-is:   init.hs 
    hs-source-dirs: Init 
    build-depends:  base 
        , directory 
        , persistent 
        , persistent-sqlite 
        , text 
        , myproject 
        , yesod-default 

問題は、私は「秘密結社のビルド」を実行すると、それはときinit.hsのinitを再構築しないということです変更。これを実現するためには何が必要ですか?ここで

は(init.hsを編集した後)の例の端末セッションです:

$ cabal build 
Building myproject-0.0.0... 
Preprocessing library myproject-0.0.0... 
Registering myproject-0.0.0... 
$ rm -rf dist/build/myproject/init 
$ cabal build 
Building myproject-0.0.0... 
Preprocessing library myproject-0.0.0... 
Registering myproject-0.0.0... 

ありがとうございました。

+0

質問タイトルには複数の実行可能ファイルが記述されています。同じカバールファイルにこの問題がない別の実行可能なスタンザがありますか? – Heatsink

+0

'init'は再構築されないのですか?新しい実行可能ファイルを表示するには 'dist/build'を調べなければなりません。新しい実行ファイルを別の場所に置くには' cabal install'を実行する必要があります。 –

+0

上記のキャバルスニペットを更新しました。 Init.hs(Init /ディレクトリ内にある)を変更すると、何も再コンパイルされません。キャバルが実行され、ghcが呼び出されずに終了します。 dist/buildの実行可能ファイルへのシンボリックリンクがあり、コードを実行するために使用しています。 – Gregory

答えて

4

cabal buildcabal runに引数として渡すことで、複数の実行可能ファイルを管理できます。たとえば、​​です。ターゲット名が指定されていない場合、最初の実行可能ファイルがデフォルトです。