Cabal在需要分析库时不安装依赖关系?

我想用分析来编译我的程序,所以我运行:

$ cabal configure --enable-executable-profiling ... $ cabal build ... Could not find module 'Graphics.UI.GLUT': Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'? ... $ # indeed I have not installed the prof libs for GLUT, so.. $ cabal install -p GLUT --reinstall ... Could not find module 'Graphics.Rendering.OpenGL': Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'? ... 

所以,问题是,不像cabal通常的欢迎行为,cabal不解决依赖关系,并在需要分析库时安装它们。

我可以通过手动解决依赖关系来解决这个问题(通过在编译之后出现的错误):

 $ cabal install -p OpenGLRaw --reinstall $ cabal install -p StateVar --reinstall $ cabal install -p Tensor --reinstall $ cabal install -p ObjectName --reinstall $ cabal install -p GLURaw --reinstall $ cabal install -p OpenGL --reinstall $ cabal install -p GLUT --reinstall 

然后重复我的下一个依赖..

有没有更好的方法来做到这一点? 也就是说,是否要让cabal自己像正常的图书馆那样做自己的工作?

我启用了library-profiling: True ~/.cabal/config文件library-profiling: True在我的~/.cabal/config文件中为library-profiling: True 。 从那时起,任何新的安装将自动启用分析。

不幸的是,这仍然意味着我必须手动重新安装已安装的旧包。 虽然,经过一段时间手动这样做,我现在已经大多数包与分析启用重新安装…

从汤姆Lokhorst评论:

我希望有人会有更好的答案,下一次不需要手动重新安装完整的Haskell平台。

对于未来的访客:

安装所有已安装库的分析版本的任务已经变得不那么繁琐了, cabal (cabal-install)现在跟踪使用它在.cabal目录中的world文件中安装的.cabal (在Linux上,这将是$HOME/.cabal ,在Windows上就像C:\Users\%YOU%\AppData\Roaming\cabal\ ,在OSX上)。

因此,在config文件(在同一个目录中)启用分析后,并清除GHC的软件包数据库(您可以在ghc-pkg list nonexistingfind全局数据库和用户数据库的ghc-pkg list nonexisting ;从全局数据库中删除cabal-installed软件包ghc-pkg unregister packagename如果有的话),重命名或删除整个用户数据库 – 这是必要的,因为world文件只跟踪显式安装的软件包,而不是它们的依赖项)

 $ cabal install --reinstall world --dry-run 

首先运行--dry-run在实际重新安装任何东西前检查是否有问题。 如果它将重新安装启动包,如processdirectory ,这是一个坏的迹象,如果你不知道如何处理它,请在#haskell IRC频道,其中一个邮件列表,或在这里的指导。 如果由于新版本的某些软件包互相不兼容而无法find一致的安装计划,通常可以通过编辑world文件和限制某些软件包的允许版本来解决。

那么,如果你乐观的认为什么都不会坏的,

 $ cabal install --reinstall world 

在GHC忙于编译的时候,还有一壶好茶。

Daniel Fischer的回答看起来不错,但由于某种原因,我的〜/ .cabal / world库只包含直接安装库的条目,而不包含它们的依赖关系。

相反,我倒出了所有使用安装的库列表

 $ ghc-pkg list > list 

这列出了系统和本地安装的库。 因此,我编辑了list文件以删除第一部分(包含系统范围安装的库),只留下/home/<user>/.ghc/... 。 最后,我跑了

 $ cabal install --reinstall $(cat list) 

这对我有效。 你也许应该先--dry-run 。 然后去泡一壶茶。 或烤一块蛋糕。

看起来现在没有办法了: 票#282 – 分析版本的库pipe理不好 “像往常一样,问题是缺乏实现所有这些我们都想要的所有这些好function的开发时间。

对于访客2016+:只需安装ghc-prof

Debian Linux系统:

sudo apt-get install ghc-prof

Arch Linux系统:

sudo pacman -S ghc-prof