我的用户目录~
,项目A
和B
中有两个项目。
我在项目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版。
答案 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: []