2011-07-15 75 views
19

我一直在做這個Haskell項目,我有一個cabal文件。現在,我的項目被組織爲一個實現簡單解釋器的庫。我也有一個非常短的主文件,需要將其構建到可執行文件中以調用庫。我想要做的是:如何避免在這個cabal文件中重新編譯?

1)編譯庫和揭露一些模塊

2)的編譯後的可執行

我有工作,似乎做一個小集團文件。問題是當它編譯可執行文件時,重新編譯已經在步驟(1)中編譯的所有模塊。我不明白爲什麼會這樣做 - 是否有任何方法可以阻止它,創建兩個單獨的cabal文件?

我真的不想創建兩個單獨的cabal文件,因爲cabal似乎不想在同一個目錄中同時存在cabal文件,而且我也不想爲它創建單獨的項目目錄第二步,因爲它基本上相當於編譯單個文件。

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

啊,這個如何使可執行文件依賴於同一個cabal文件中的庫。 – nh2

+3

有關適合這種情況的可能的項目佈局,請參見[如何使用庫+可執行文件構建一個仍然使用runhaskell/ghci運行的Haskell cabal項目?](http://stackoverflow.com/questions/12305970/how-to-讓-A-哈斯克爾-陰謀項目與 - libraryexecutables - 即-仍然運行與)。 – nh2