2012-07-31 25 views
10

我正在使用Yesod的網站上工作我有正常的生成運行,但我似乎無法可靠地填充我的數據庫。我有一個填充數據庫的第二個哈斯克爾程序,我已經把它添加到我的陰謀文件是這樣的:Cabal Multiple Executables

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.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

問題標題提到了多個可執行文件。是否有另一個可執行文件段在同一個cabal文件中沒有這個問題? – Heatsink 2012-07-31 17:49:23

+0

你確定'init'沒有被重建嗎?如果你想把新的可執行文件放到其他地方,你必須在'dist/build'下查看新的可執行文件,或者運行'cabal install'。 – 2012-07-31 18:51:08

+0

我已經更新了上面的cabal片段。當我修改init.hs(它位於Init /目錄內)時,它不會重新編譯任何東西。 cabal運行並退出,沒有任何ghc調用。我有dist/build中用於運行代碼的可執行文件的符號鏈接。 – Gregory 2012-08-01 02:42:35

回答

4

您可以通過將它們作爲參數傳遞給cabal buildcabal run來管理多個可執行文件。例如,​​。如果沒有給出目標名稱,則第一個可執行文件是默認文件。