如何在cabal沙盒中编译依赖项以进行性能分析

5

我正在尝试使用性能分析选项编译我的一个可执行文件。我在我的cabal文件中添加了-prof选项。这样做后,我会收到一条消息,内容如下:

Could not find module ‘Package-X’
Perhaps you haven't installed the profiling libraries for package ‘package-x’?
Use -v to see a list of the files searched for.

我该怎么做呢?我尝试使用cabal install --only-dependency --reinstall命令,但是返回了以下响应:

All the requested packages are already installed:
Use --reinstall if you want to reinstall anyway.

我已经使用了 --reinstall ,应该怎么办?我还尝试了 cabal configure --enable-profiling-libraries等操作...


这个问题是否解决了你的问题?链接 - bheklilr
它有点解决了。cabal install --reinstall world 做了一些事情。但我仍然无法让我的可执行文件启用分析。如果我在 cabal 文件中添加 -prof,它会抱怨不需要。如果我删除 +RTS -p,则会抱怨二进制文件未使用分析支持编译... - mb14
你是否在.cabal/config文件中添加了library-profiling: True?这似乎是安装带有性能分析库的真正技巧。 - bheklilr
不,我没有。我认为 cabal configure --enable-library-profiling 可以解决问题。然而,我的问题可能是我正在使用不同的沙盒源……我正在尝试重新编译它们。 - mb14
.cabal/config文件中将library-profiling设置为True就可以解决问题了。但是我不得不删除沙盒(cabal sandbox delete; cabal sandbox init; cabal sandbox install),这样会重新安装所有东西(正常+分析库)。我本来希望避免重新安装正常的库。 - mb14
1个回答

4
The 链接由bheklilr提出的建议有所帮助,但并不是直接可行的解决方案。
最终我在.cabal/config文件中添加了library-profiling: True,并重新安装了所有内容。 cabal install --reinstall wolrd没有起作用,可能是因为我在沙盒中。但是,使用沙盒的好处是您可以将其丢弃,然后我重新安装了所有内容。
cabal sandbox delete
cabal sandbox init
cabal install

尽管这个解决方案有效,但以下原因使其不尽人意:
  • 我必须修改全局文件.cabal/config,在理想情况下,我只需要修改我的sandbox。然而,我没有尝试创建本地cabal配置文件。

  • 我不得不重新安装所有东西,即每个库的分析版本和已经安装的普通版本。


根据文档(https://www.haskell.org/cabal/users-guide/installing-packages.html#developing-with-sandboxes),您可以通过在与您的`cabal.sandbox.config`相同的目录中创建名为`cabal.config`的文件来设置项目本地配置文件。这应该允许您为您的沙盒设置`library-profiling: True`选项。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接