【问题标题】:How to avoid recompiling in this cabal file?如何避免在这个 cabal 文件中重新编译?
【发布时间】:2011-10-06 08:54:38
【问题描述】:

我一直在做这个 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    

【问题讨论】:

    标签: haskell cabal


    【解决方案1】:

    在您的可执行部分中,将库添加到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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多