如果你在一个小集团文件中声明库+可执行部分,而避免了图书馆的双重编译通过把图书馆变成一个hs-source-dirs目录下,你不能用通常运行项目ghci和runhaskell了,特别是如果可执行文件有辅助模块本身.
什么是推荐的项目布局
runhaskell我的.cabal文件的许多节中经常有类似的属性.例如
Library x
...
ghc-options:
-O2 -Wall -fno-warn-missing-signatures -fwarn-incomplete-patterns
-fno-warn-name-shadowing
Executable y
...
ghc-options:
-O2 -Wall -fno-warn-missing-signatures -fwarn-incomplete-patterns
-fno-warn-name-shadowing
Run Code Online (Sandbox Code Playgroud)
保持一致是繁琐且容易出错的.有没有更好的办法?
甚至更棘手的是当字段相似但不完全相同时,例如当我有几个具有共同构建依赖性但是变化很小的可执行文件时.
我正在尝试HaskSplit在我的.cabal配置中为我的项目创建一个测试套件:
-- Initial HaskSplit.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: HaskSplit
version: 0.1.0.0
synopsis: Haskell Implementation of Shamir's Secret Sharing Scheme
-- description:
license: MIT
license-file: LICENSE
author:
maintainer:
-- copyright:
category: Security
build-type: Simple
-- extra-source-files:
cabal-version: >=1.10
executable HaskSplit
main-is: Main.hs
default-language: Haskell2010
-- other-modules:
other-extensions: TemplateHaskell, NoImplicitPrelude, RankNTypes, OverloadedStrings
build-depends: base >=4.6 && <4.7,
resourcet >=1.1 && <1.2,
bytestring >=0.10 && <0.11,
conduit-extra >=1.1 && <1.2,
vector >=0.10 && <0.11, …Run Code Online (Sandbox Code Playgroud) 我用两个目标,一个库和一个可执行文件创建了我自己的cabal包(我们称之为package-1).库部分有一个构建依赖列表,可执行文件有另一个构建依赖列表,它更大.
现在我创建package-2,它在build-depends部分列出了package-1.我想只引入package-1 的库目标中列出的依赖项.但似乎在把所有的包1的所有部分,包括依赖的可执行目标列出的依赖关系.
有没有办法将依赖图修剪为package-1中的库,或者我是否必须将该库目标分解为单独的独立包?