gpt4 book ai didi

haskell - 如何避免在这个 cabal 文件中重新编译?

转载 作者:行者123 更新时间:2023-12-03 11:56:33 24 4
gpt4 key购买 nike

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

最佳答案

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

关于haskell - 如何避免在这个 cabal 文件中重新编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com