我的用户目录中有两个项目~
,项目A
和B
。我运行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.yaml
到B
文件夹中的文件。起初,内容可能是:
resolver: lts-6.0
packages:
- '.'
- '/home/jonaprieto/A'
extra-deps: []
然后,它运行:
$ stack build