我正在尝试将我的第一个包上传到 Hackage(耶!),但出现以下错误:
依赖项“build-depends: base”未指定版本号的上限。 “基础”包的每个主要版本都会以各种方式更改 API,并且大多数包都需要进行一些更改才能与其一起编译。推荐的做法是指定“基本”包版本的上限。这可以确保当“基础”包的新主要版本发布时,您的包将继续构建。如果您不确定使用哪个上限,请使用下一个主要版本。例如,如果您已使用“base”版本 2 和 3 测试了包,则使用“build-depends: base >= 2 &&
这似乎是拒绝我的包裹的完全可以接受的理由。
有没有一个好的工具可以针对各种版本测试我的包base
这样我就可以看到界限是什么(而不仅仅是猜测)?我能想到的最好的方法是使用一些 shell 脚本来执行以下操作:
% for v in $BASE_VERSIONS
do
cabal install base-$v &&\
cabal configure --enable-tests &&\
cabal build &&\
cabal test && echo "$v ok" || echo "$v fail"
done
但我觉得应该有更好的东西。
这是一个非常糟糕的主意!你必须not升级基地或GHC 附带的任何其他软件包 http://hackage.haskell.org/trac/ghc/browser/packages(那些与-
在标签列中),否则一切都会严重损坏。
使用旧版本的 base 进行测试的唯一方法是安装旧的 GHC 并使用它进行测试。我建议在 7.0.4 和 7.2.2 上尝试一下;如今,支持旧版本可能是浪费时间。
如果失败,只需指定base >= VERSION && < 5
, where VERSION
是您的 GHC 的版本。或者base == 4.*
并希望一切顺利:)
严肃地说,base 的 API 并没有真正改变那么多,所以你不太可能遇到很多问题。
用于使用各种版本的软件包测试您的程序,而不干扰您的主程序~/.cabal
存储库,我强烈推荐阴谋集团开发 http://hackage.haskell.org/package/cabal-dev;就像是
$ cabal-dev install 'pkg==VERSION'
$ cabal-dev install
$ cabal-dev test
应该这样做。
顺便说一句,你可以这样做cabal check
在将包上传到 Hackage 之前收到有关此类问题的警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)