Haskell Cabal在需要分析库时不安装依赖项?

Haskell Cabal在需要分析库时不安装依赖项?,haskell,profiling,cabal,Haskell,Profiling,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 i

我想用评测来编译我的程序,所以我运行:

$ 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在需要评测库时不解决依赖项并安装它们

我可以通过手动解析依赖项(通过以下编译一段时间后出现的错误)来解决此问题:

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


有更好的方法吗?i、 e是否让cabal像对普通库那样独立完成工作?

我已在我的
~/.cabal/config
文件中启用了
库评测:True
。从那时起,任何新安装都将自动启用评测


不幸的是,这仍然意味着我必须手动重新安装已安装的旧软件包。虽然,在手动执行此操作一段时间后,我现在已在启用评测的情况下重新安装了大多数软件包…

现在似乎没有办法:

来自Tom Lokhorst的评论:

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

对于未来的访客:

安装所有已安装库的分析版本的任务已不再那么繁琐,
cabal(cabal install)
现在在
.cabal
目录的
world
文件中跟踪使用它安装的内容(在linux上,这将是
$HOME/.cabal
,在Windows上类似于OSX上的
C:\Users\%YOU%\AppData\Roaming\cabal\

因此,在
config
文件(在同一目录中)中启用评测并清除GHC的包数据库之后(您可以根据不存在的
ghc pkg列表找到全局数据库和用户数据库的位置
;使用
ghc pkg unregister packagename
从全局数据库中删除阴谋集团安装的包,如果有,重命名或删除整个用户数据库-这是必要的,因为
world
文件只跟踪显式安装的包。)软件包(而不是它们的依赖项),安装所有支持分析的软件包应按如下方式工作:

$cabal安装--重新安装world--试运行
在实际重新安装任何东西之前,首先使用
--干运行
,检查问题。如果它会重新安装启动包,如
进程
目录
,这是一个不好的迹象,如果你不知道如何处理它,请访问
#haskell
IRC频道,邮件列表之一,或此处寻求指导。如果它不知道如何处理它由于某些软件包的新版本彼此不兼容,ls需要找到一致的安装计划,这通常可以通过编辑
world
文件并限制某些软件包的允许版本来解决

那么,如果你乐观地认为没有什么东西会严重损坏

$cabal安装--重新安装world

在GHC忙于编译的时候喝一壶好茶。

丹尼尔·菲舍尔的答案看起来不错,但出于某种原因,我的~/.cabal/world库只包含直接安装的库的条目,而不包含它们的依赖项

相反,我使用

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

$ cabal install --reinstall $(cat list) 

这对我很管用。你应该先做
--试运行
。然后去泡一壶茶。或者烤一块蛋糕。

访客2016+:只需安装
ghc prof

Debian Linux系统:

sudo apt get install ghc prof

Arch Linux系统:

sudopacman-sghc教授


我已经在我的
~/.cabal/config
文件中启用了
库评测:True
。从那时起,任何新的安装都将自动启用评测。不幸的是,这仍然意味着我必须手动重新安装已安装的旧软件包。尽管手动执行一段时间后,我现在已经重新安装了大多数软件包启用配置文件后…@Tom Lokhorst:谢谢。而且,这似乎是最好/唯一的答案。因此,如果你愿意,你可以把它作为一个答案写下来,这样我就可以接受了。好吧,对免费投票说不是不礼貌的:-)但是,我确实希望有人能给出一个更好的答案,下次不需要我手动重新安装完整的Haskell平台。如果您在堆栈上遇到此问题,可能会对您有所帮助。如果在配置中设置为
True
,这真的会启用评测吗?当我重新安装现有软件包时,似乎s需要-p标志我刚试过,
cabal安装--
重新安装world
在启用了评测的情况下重新安装了。行
库评测:True
可能在配置文件中被注释掉了吗?呵呵,谢谢。我把
--
作为命令行标志阅读而不是注释。哎哟!我已经删除了
~usr/lib/ghc/pac中的数据库kage.conf.d
当我尝试运行
cabal安装--重新安装world
时,我得到一个错误
找不到包数据库
。你确定我们需要删除数据库吗?@FordO。这看起来像是全局包数据库,用户数据库通常在
~/.ghc/$ghc\u版本
下。只有用户数据库可以被删除,删除了整个全局包数据库破坏了您的GHC。如果您有包数据库的备份,请将其恢复,否则我担心您将需要重新安装GHC。从全局数据库中,只有安装了cabal的包才应该取消注册。我想这对许多人来说是一个熟悉的例程。如果有命令可以自动执行此操作,否则将无法执行s任务,例如,
cabal重新安装all——启用库评测功能
。是否真的需要重新编译所有库来评测我的应用程序
$ cabal install --reinstall $(cat list)