2011-07-15 29 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

相关问题