如何避免在此cabal文件中重新编译?

chr*_*sdb 21 haskell cabal

我一直在研究这个Haskell项目,我有一个cabal文件.现在,我的项目被构建为一个实现简单解释器的库.我还有一个非常短的主文件,需要构建成可执行文件来调用库.我想做的是:

1)编译库并公开一些模块

2)编译可执行文件

我有一个cabal文件,可以工作,似乎这样做.问题是当它编译可执行文件时,它会重新编译已经在步骤(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    
Run Code Online (Sandbox Code Playgroud)

ham*_*mar 22

在可执行文件部分中,添加库,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
Run Code Online (Sandbox Code Playgroud)

为此,您需要指定Cabal-Version >= 1.8.有关详细信息,请参阅Cabal机票#89.

  • 对于这样的可能的项目布局拟合情况,请参阅[如何使用仍然使用runhaskell/ghci运行的库+可执行文件制作Haskell cabal项目?](http://stackoverflow.com/questions/12305970/how-to-make -a-哈斯克尔-阴谋项目与 - libraryexecutables - 即-仍然运行与). (3认同)