首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“堆栈构建”要更改我的.cabal文件?

为什么“堆栈构建”要更改我的.cabal文件?
EN

Stack Overflow用户
提问于 2017-12-09 03:20:49
回答 2查看 1K关注 0票数 12

我正在尝试构建一个使用[医]子宫豌豆的项目。

运行stack build会得到以下错误,这意味着我需要将Euterpea添加到.cabal文件的build-depends部分。

代码语言:javascript
复制
$ sb
composition-0.1.0.0: build (lib + exe)
Preprocessing library composition-0.1.0.0...
[2 of 2] Compiling Lib              ( src/Lib.hs, .stack-work/dist/x86_64-linux-nix/Cabal-1.24.2.0/build/Lib.o )

/home/matthew/backup/composition/composition/src/Lib.hs:5:1: error:
    Failed to load interface for ‘Euterpea’
    It is a member of the hidden package ‘Euterpea-2.0.4’.
    Perhaps you need to add ‘Euterpea’ to the build-depends in your .cabal file.
    Use -v to see a list of the files searched for.

--  While building package composition-0.1.0.0 using:
      /home/matthew/.stack/setup-exe-cache/x86_64-linux-nix/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-1.24.2.0 build lib:composition exe:composition-exe --ghc-options " -ddump-hi -ddump-to-file"
    Process exited with code: ExitFailure 1

我在那里添加Euterpea,然后我的.cabal文件的library部分如下所示。

代码语言:javascript
复制
library
  hs-source-dirs:
      src
  build-depends:   base >= 4.7 && < 5
                 , Euterpea
  exposed-modules:
      Lib
  other-modules:
      Paths_composition
  default-language: Haskell2010

但是,当我再次运行stack build时,它会产生相同的错误--并将我的.cabal文件更改回原来的状态,其中的library部分如下所示

代码语言:javascript
复制
library
  hs-source-dirs:
      src
  build-depends:
      base >= 4.7 && < 5
  exposed-modules:
      Lib
  other-modules:
      Paths_composition
  default-language: Haskell2010

为什么stack build要修改我的cabal文件?我以前从没见过这样的事。

附带注意:不确定它是否相关,但.cabal文件的格式似乎与正常情况不同。在这里,和以前的项目一样,我通过运行stack new <project-name>自动初始化。我不知道我可能做了什么与以前的项目不同,从而导致了stack build这种意想不到的行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-09 04:06:34

确保package.yaml存在于项目目录的根目录中。

package.yaml是一种新的文件格式,用于改进hpack转换的cabal语法。

堆栈支持hpack,就像stack build命令自动将package.yaml转换为带有hpack命令的阴谋文件一样。

因此,删除package.yaml或编辑package.yaml以添加Euterpea包。编辑它不会那么困难,因为它的格式是YAML。

票数 16
EN

Stack Overflow用户

发布于 2021-01-20 00:53:54

我想添加到山本Yuji氏的答案中。解决办法是完全正确的。但是我只想添加一些东西,编辑package.yaml并不难。

步骤1:最棘手的部分是找到正确的包名

使用胡格尔堆垛查找模块所在的包。了解有关如何在此帖子中查找包名的更多信息。

步骤2:现在您必须打开package.yaml文件并添加包名。在您的示例中,在依赖项列表中添加'Euterpea‘包。

代码语言:javascript
复制
dependencies:
...
- your-package-name

请注意,Euterpea包必须以不同的方式添加。为了更好的理解,请阅读这个职位

步骤3:在项目根目录中打开project-name.cabal并在build-depends下添加必需的包名

代码语言:javascript
复制
library
  hs-source-dirs:
      src

  build-depends:
      base >= 4.7 && < 5
    , your-package-name

  exposed-modules:
      Lib

步骤4:发出stack build以下载和构建依赖项(如果计划在REPL中使用它,则发出stack ghci )

希望这行得通!快乐编码!:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47724988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档