使用其他包的二进制文件堆栈

时间:2016-05-27 09:20:01

标签: haskell haskell-stack

我的用户目录~,项目AB中有两个项目。 我在项目stack init上运行了stack build以及之后的A。然后,我有 文件夹A~/.stack-work/install/x86_64-linux/lts-6.0/7.10.3/bin包的二进制文件。问题是B需要A包中此版本的二进制文件,然后在stack项目目录中使用B尝试相同的版本。我试着~/B运行以下命令但没有成功。

stack build ~/.stack-work/install/x86_64-linux/lts-6.0/7.10.3/bin

我该怎么做?如果我创建第三个包C并需要类似的东西怎么办?

摘录:

A.cabal内容。

name: A
version: 1.1

B.cabal

name: B
version: 1.0
build-depends: A>= 1.1

然后,

$ stack init
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- B.cabal

Selecting the best among 8 snapshots...

* Partially matches lts-6.0
    A version 1.0 found
        - A requires ==1.1

这可以通过以下方式解决:      - 使用'--omit-packages排除不匹配的包。      - 使用“--resolver”指定匹配的快照/解析器

但实际上我有A版本的1.1版。

3 个答案:

答案 0 :(得分:1)

您不需要包含项目A的. ├── stack.yaml ├── project-A │   ├── LICENSE.txt │   ├── Setup.hs │   ├── project-A.cabal │   └── src │   └── ... │ └── project-B    ├── Setup.hs    ├── project-B.cabal    └── src    └── ... 目录 - 这是一个红色的鲱鱼。

按如下方式整理文件:

resolver: lts-5.13
packages:
- project-A/
- project-B/

您的顶级stack.yaml文件将如下所示:

stack build

然后在顶级目录中运行git diff

答案 1 :(得分:0)

我会回答你的问题...

如何放

~/.stack-work/install/x86_64-linux/lts-6.0/7.10.3/bin
PATH中的

?如果另一个项目确实需要由另一个项目构建的二进制文件(即程序),那么这就是实现它的方法。

或者,将构建的程序复制到当前PATH中的某个目录 - 即/ usr / local / bin或〜/ bin。

如果这没有回答您的问题,请发布两个项目的cabal文件。

答案 2 :(得分:0)

我在挖掘false的{​​{3}}后找到了答案。在stack文件夹中创建文件stack.yaml。起初内容可能是:

B

然后,它运行:

resolver: lts-6.0 packages: - '.' - '/home/jonaprieto/A' extra-deps: []