Как избежать перекомпиляции в этом файле cabal?
Я работал над этим проектом на Haskell, и у меня есть кавалерский файл для него. Теперь мой проект структурирован как библиотека, которая реализует простой интерпретатор. У меня также есть очень короткий основной файл, который нужно встроить в исполняемый файл для вызова библиотеки. Что я хочу сделать, это:
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
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 № 89 для деталей.