Как избежать перекомпиляции в этом файле cabal? - PullRequest
21 голосов
/ 15 июля 2011

Я работал над этим проектом на Haskell, и у меня есть для него кабальные файлы.Теперь мой проект структурирован как библиотека, которая реализует простой интерпретатор.У меня также есть очень короткий основной файл, который нужно встроить в исполняемый файл для вызова библиотеки.Что я хочу сделать, это:

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    

1 Ответ

22 голосов
/ 15 июля 2011

В разделе исполняемого файла добавьте библиотеку в 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. Подробнее см. билет Кабалы # 89 .

...