问题标签 [cabal-new]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 使用 cabal v2-install 构建可执行文件时冻结所有依赖项
我正在构建一个 Docker 映像,我想在其中捆绑多个可执行文件。每个可执行文件都定义在不同的包中,在我的例子pandoc
中是pandoc-citeproc
, 和pandoc-crossref
. 构建应该在基于 Debian/Ubuntu 的系统上尽可能合理地重现。
我想做的是使用(类似于)一个cabal.project.freeze文件来确保所有后续构建都将使用相同的包。
我知道我可以修复可执行文件的版本:
但这不会修复传递依赖的版本,因此在不同时间重新构建可能会导致构建结果略有不同。我可以在此设置中以某种方式创建和使用冻结文件吗?在这里使用 v2-freeze 似乎没有用:
haskell - 如何指示黑线鳕链接到 hackage 包的 hackage 文档?
所以,我正在使用黑线鳕(通过 cabal)为我的本地 Haskell 包生成文档。它可以轻松地将自己的本地 html 文档相互超链接。但是,每当我的包引用另一个包中的符号时,它都不会创建链接。
我的大部分外部依赖项都有关于 Hackage 的黑线鳕文档。有没有办法设置黑线鳕,以便它可以找到 Hackage 的文档和超链接?
haskell - 使用 cabal new-install 重新安装相同版本的软件包
我正在开发一个 Haskell 包。我还没有上传到 Hackage,版本号是 0.1.0.0。我正在使用新型 Cabal 命令。
为了在我处理包时测试包(使库可用于测试项目),我cabal new-install --lib
在构建包后运行。
但是,我注意到错误修复没有任何效果,并且我的测试项目(它本身不是 Cabal 项目,由单个 Haskell 文件组成)即使在我构建和安装库时仍然以相同的方式运行。
因此,我尝试cabal new-install --lib
使用各种标志组合来修改命令,例如--force
,--force-reinstalls
和--reinstall
. 这没有任何效果。
在重新编译测试项目之前,也没有删除库和测试项目中所有生成的文件并重新构建库。
一种可能的解决方案可能是增加版本号。但是,由于该软件包尚未发布,因此我不想在将其上传到 Hackage 之前开始使用版本号。即使在我发布它之后,我也只想在我实际将新版本上传到 Hackage 时更改版本号,而不是每次在我自己的 PC 上测试微小的更改时。
旧的阴谋集团命令表现得很好。但是,有什么方法可以new-install
在我修复错误而不更改版本号的情况下重新安装软件包?
我发现了一个 2012 年的错误报告,可能是相关的,但我必须承认我不太了解它,因为我对 Cabal 完全陌生。https://github.com/haskell/cabal/issues/294
windows - ghc 找不到我使用 cabal new-install --lib 构建和安装的库
我正在使用 Cabal 构建一个 Haskell 库,我想安装它以在其他项目中使用。我正在使用 Windows PowerShell 和新型 Cabal 命令。我有 ghc 8.10.1 和 Cabal 3.2.0.0 并使用 Chocolatey 安装它们。cabal new-install --lib
构建和安装库很好,没有警告。从--verbose
输出中我注意到 Cabal 提到了文件夹C:\Users\Liisi\AppData\Roaming\cabal\store\ghc-8.10.1\package.db
,它确实包含我的包。
但是,当我尝试编译包含使用此库的单个 Haskell 文件的测试项目时,ghc 找不到该库。(测试项目本身不是 Cabal 项目,因为我打算将该库用于小型、主要是单文件项目。)
ghc Test.hs
并且ghc --make Test.hs
都找不到图书馆。ghc-pkg list
没有列出我的图书馆的名称。在另一个问题(这可能是一个错误的问题)中,我得到了尝试的建议,ghc -package-env=C:\Users\Liisi\.ghc\x86_64-mingw32-8.10.1\environments\default --make
并且这个确实有效 - 但是,它会破坏使图书馆成为阴谋集团项目的主要目的(方便和可用性)。
我也有机会在 OSX 上测试我的包,一切都按预期工作。因此,这可能是特定于 Windows 的问题。
haskell - 如何与 cabal-3 和 ghc(也是 ghc-pkg)一起工作?
随着 cabal-3 的发布,来自 Hackage 的软件包被安装在编译器一无所知的新ghc
位置ghc-pkg
。换句话说,软件包已安装但未注册ghc
. Ghci
, ghc
,ghc-pkg
不能工作。
例如,
创建文件 t1.hs
我们试试看:
此处描述了此错误
https://github.com/haskell/cabal/issues/6262
和这里
https://gitlab.haskell.org/ghc/ghc/-/issues/17341
我用作设置系统变量的临时解决方案
(Windwos 10,巧克力的 haskell-dev)
通过 在 Windows 上,使用 cabal 安装的软件包似乎在 ghc/ghci 中不可用
但随着更新,我将不得不手动更改此系统变量。
这个问题有没有更优雅的解决方案?
PS 不幸的是,这个解决方案(通过 GHC 的环境变量 GHC_PACKAGE_PATH)与 Cabal 不兼容 :(
haskell - 如何在没有堆栈的情况下运行抖动
我从Shake 手册的“运行”部分创建了推荐的build.sh
文件:
但运行该脚本会出现以下错误:
我做了cabal v2-install shake --installpath=bin
,但之后仍然得到同样的错误。我也试过bin/shake
但得到同样的错误。
我尝试在 中添加-package shake
命令ghc
,build.sh
但收到此错误:
按照建议添加-v
会出现此错误:
在没有Haskell 堆栈的情况下使用 Shake 的正确方法是什么(最好只使用通过ghcup
和/或 cabal-install v2 命令安装的 ghc 8.8 )?
haskell - 保持阴谋集团的新活力
我在开发模式下使用以下方式运行haskell
基于 - 的构建:cabal
ubuntu 20.04
保持 cabal 会话在后台工作(保持活动状态)以供生产使用的最佳实践是什么?
我徒劳地查看了阴谋集团的文档。
haskell - 如何分析使用 Cabal 构建的 TemplateHaskell?
完整项目位于https://github.com/ysangkok/cabal-profiling-issue
该项目包含由cabal init
. 我现在将粘贴最有趣的源代码片段。
在Main.hs
我有:
在TH.hs
我有:
但是,如果我安装profiling: true
并cabal.project
运行cabal build
GHC 8.6.5 和 Cabal 3.4.0.0(使用 ghcup 安装),我会得到:
代码有什么问题,为什么它在没有分析的情况下编译,但在启用时失败?
haskell - 如何将 lib 从一个 cabal 包导入到另一个
所以我的文件夹结构是这样的
我想要做的是在./eulerlibs
(库)cabal 目录中导入库模块,让我们说./p005
(可执行)cabal 目录
我知道我可以包含构建的库(* .so),但找不到链接两个 cabal 的方法项目
我对 cabal 和 haskell 都很陌生,所以一些见解将不胜感激。如果没有任何结果,我将不得不将库添加到我真的想避免的 p005 本身。
haskell - 如何使用 cabal(工具)或堆栈创建应用程序的二进制分发
我用 Haskell 编写了一个应用程序,它开始对用户有点用处。然而,我的应用程序并不针对技术熟练的人,更不用说 Haskell 开发人员了,所以从源代码构建我的应用程序并不是我可以期望他们做的事情。
因此,为了让我的用户可以使用我的应用程序,我想自己构建应用程序,将其可执行文件、数据文件、依赖项、依赖项的数据文件、所需的许可信息和其他所需文件放入一个存档中,并将该存档放到一个网站。现在用户可以下载该存档,解压缩它并拥有运行我的应用程序所需的一切。
我上面描述的过程似乎是向我分发应用程序二进制文件的一种相当常见的方式。但是,我无法弄清楚要使用哪些工具或如何配置它们以将我的应用程序构建为上述二进制发行版。
Cabal(图书馆)似乎具有为此所需的功能。通常Setup.hs
的脚本(没有 cabal(工具)或堆栈作为包装器)支持选项,例如--prefix
和--enable-relocatable
,允许您将包安装到给定的前缀并以确保在前缀 (作为一个整体)被移动到其他地方。
但是使用 rawSetup.hs
的缺点是它不能处理自动安装依赖项。而且由于许多大小适中的 Haskell 应用程序将具有数百个依赖项(或者至少我的依赖项),因此手动配置和构建它们中的每一个实际上并不可行。
安装依赖项问题的明显解决方案是使用包装工具,例如 cabal(该工具)或堆栈,因为它们专门用于处理大型依赖项树的问题。但是,它们似乎都有问题阻止我将我的应用程序构建为二进制发行版:
stack build
没有选项--prefix
or--enable-relocatable
而是总是安装到.stack-work
and~/.stack
。cabal v2-*
有选项--prefix
,--enable-relocatable
但似乎完全忽略它们,而是总是安装到dist-newstyle
and~/.cabal
。cabal v1-*
对于非常简单的情况,似乎可以做我想做的事。然而,对于更复杂的情况,它会产生模糊的构建失败,其中 GHC 抱怨没有从依赖项中找到模块,而 cabal 抱怨部分安装的包。但是,即使将这些故障放在一边,使用旧命令进行新的工作流程通常也不是一个好主意。
所以,既然我似乎对这些工具不走运,我还可以使用哪些其他工具将 Haskell 应用程序构建到二进制发行版中?或者也许我列出的工具之一实际上可以满足我的需求,而我只是以错误的方式使用它?
范围的一些限制:
- 目前我主要对 Windows 的构建感兴趣,但其他平台的解决方案也会很有趣。
- 当我谈论依赖时,我主要指的是 Haskell 依赖(即 Cabal 包)。捆绑外部 C 依赖项的解决方案会很有趣,但这不是严格的要求。