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



我的用户目录中有两个项目~,项目AB。我运行stack init,后来在项目A上运行stack build。然后,我有文件夹中A包的二进制文件~/.stack-work/install/x86_64-linux/lts-6.0/7.10.3/bin 。问题是B需要A包中的此版本的二进制文件,然后在B项目目录上尝试使用stack相同的构建。我尝试运行以下命令~/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 来排除不匹配的包。 - 使用"--解析器"指定匹配的快照/解析器

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

你不需要包含项目 A 的 bin 目录 - 这是一个红鲱鱼。

像这样组织文件:

.
├── stack.yaml
├── project-A
│   ├── LICENSE.txt
│   ├── Setup.hs
│   ├── project-A.cabal
│   └── src
│       └── ...
│
└── project-B
    ├── Setup.hs
    ├── project-B.cabal
    └── src
        └── ...

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

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

然后在顶级目录中运行stack build

我会尝试回答你的问题...

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

在你的PATH?如果另一个项目确实需要由另一个项目构建的二进制文件(即程序),那么这将是这样做的方法。

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

如果这不能回答你的问题,请发布两个项目的阴谋集团文件。

我在深入研究stack的常见问题解答后找到了答案。创建stack.yamlB文件夹中的文件。起初,内容可能是:

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

然后,它运行:

$ stack build

最新更新