2016-05-27 1 views
0

私のユーザディレクトリに2つのプロジェクト~、プロジェクトAおよびBがあります。 Aプロジェクトでstack init以降のstack buildを実行しています。次に、私はパッケージのバイナリを のフォルダ~/.stack-work/install/x86_64-linux/lts-6.0/7.10.3/binに持っています。問題はBAパッケージのバイナリのこのバージョンが必要で、Bプロジェクトディレクトリのstackと同じビルドを試してください。私は~/Bを試して、成功せずに次のコマンドを実行しました。他のパッケージのバイナリを使用してスタック

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

私はそれをどのように行うことができますか? 3番目のパッケージ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'を使用して一致するスナップショット/リゾルバを指定する

しかし、実際にはAというバージョン1.1がビルドされています。私はあなたの質問に答えるで刺してみよう

+0

両方のプロジェクトから.cabalファイルを投稿できますか?問題を示す最小の例を思いついてみてください。 .cabalファイルで、プロジェクトBがプロジェクトAのものをどのように参照しているのかを確認したいと思います。 – ErikR

+0

質問を更新しました。 – jonaprieto

答えて

0

...

どのようにあなたのPATH

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

を入れてはどうですか?他のプロジェクトが実際にバイナリ(つまりプログラム)を別のプロジェクトでビルドする必要がある場合、これがその方法です。

または、現在のPATH(つまり/ usr/local/binまたは〜/ bin)のディレクトリにビルドしたプログラムをコピーします。

これで問題が解決しない場合は、両方のプロジェクトのカバールファイルを投稿してください。

+0

それは 'B'ビルの仕事をしません。 – jonaprieto

0

FAQstackに掘り下げて答えを見つけました。ファイルstack.yamlBに作成します。最初にコンテンツが考えられます。

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

extra-deps: [] 

、それが実行されます。

$ stack build

1

あなたはプロジェクトAのbinディレクトリ含める必要はありません - 赤いニシンでした。

は次のようにファイルを整理:

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

あなたのトップレベルstack.yamlファイルは次のようになります。トップレベルのディレクトリの実行stack buildに続いて

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

関連する問題