2016-05-27 2 views
0

У меня есть два проекта в моем каталоге пользователей ~, проект 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-пакеты, чтобы исключить несовпадение пакет (ы). - Используя '--resolver', чтобы указать соответствующий снимок/резольвер

Но у меня на самом деле есть версия 1.1 от A build.

+0

Можете ли вы разместить свои .cabal файлы из обоих проектов? Попробуйте придумать наименьший пример, демонстрирующий проблему. Я хотел бы видеть в файле .cabal, как проект B относится к материалам из проекта A. – ErikR

+0

Я обновил вопрос. – jonaprieto

ответ

0

Я возьму удар в ответ на ваш вопрос ...

Как насчет сдачи

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

в вашем PATH? Если другому проекту действительно нужны двоичные файлы (т. Е. Программы), созданные другим проектом, это будет способ сделать это.

Или скопируйте созданные программы в какой-либо каталог в текущем PATH - например,/usr/local/bin или ~/bin.

Если это не ответит на ваш вопрос, отправьте файлы cabal для обоих проектов.

+0

Это не работает здание 'B'. – jonaprieto

0

Я нашел ответ после рытья в FAQ от stack. Создайте файл stack.yaml в папку B. Сначала содержание может быть:

resolver: lts-6.0 
packages: 
- '.' 
- '/home/jonaprieto/A' 

extra-deps: [] 

Затем он работает:

$ stack build

1

Вам не нужно включить проект bin спр вочник в - это было отвлекающим маневром.

Организуйте свои файлы, как это:

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

Файл stack.yaml верхнего уровня будет выглядеть следующим образом:

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

Затем в директории запуска верхнего уровня stack build.