2016-05-27 7 views
0

Ich habe zwei Projekte in meinem Benutzerverzeichnis ~, das Projekt A und B. Ich führe stack init und später stack build auf das Projekt A. Dann habe ich die Binärdateien des A Pakets in einem Ordner ~/.stack-work/install/x86_64-linux/lts-6.0/7.10.3/bin. Das Problem ist B benötigt diese Version der Binärdateien von A Paket, und versuchen Sie dann den gleichen Build mit stack auf dem B Projektverzeichnis. Ich habe versucht, ~/B führen Sie den folgenden Befehl ohne Erfolg.Stack mit Binärdateien anderer Paket

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

Wie kann ich das tun? Was passiert, wenn ich ein drittes Paket erstellen C, und brauche etwas ähnliches?

Auszüge:

Der A.cabal Inhalt.

name: A 
version: 1.1 

Und die B.cabal.

name: B 
version: 1.0 
build-depends: A>= 1.1 

Dann

$ 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 

Dies wird durch gelöst werden kann: - ‚--omit-Pakete Mit Mismatching Paket auszuschließen (s). - Mit '--resolver' einen passenden Snapshot/Resolver angeben

Aber ich habe tatsächlich die Version 1.1 von A build.

+0

Können Sie Ihre .cabal-Dateien aus beiden Projekten veröffentlichen? Versuchen Sie, das kleinste Beispiel zu finden, das das Problem aufzeigt. Ich würde gerne in der .cabal Datei sehen, wie sich Projekt B auf Sachen aus Projekt A bezieht. – ErikR

+0

Ich habe die Frage aktualisiert. – jonaprieto

Antwort

0

ich bei der Beantwortung Ihrer Frage einen Stich nehmen werde ...

Wie wäre es

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

in Ihrem PATH? Wenn das andere Projekt wirklich Binärdateien (d. H. Programme) benötigt, die von einem anderen Projekt erstellt wurden, wäre dies der Weg, dies zu tun.

Oder kopieren Sie die erstellten Programme in ein Verzeichnis in Ihrem aktuellen PATH - d. H./Usr/local/bin oder ~/bin.

Wenn dies Ihre Frage nicht beantwortet, schreiben Sie bitte die Cabal-Dateien für beide Projekte.

+0

Es funktioniert nicht beim Bauen von 'B'. – jonaprieto

0

Ich fand eine Antwort nach dem Graben in die FAQ von stack. Erstellen Sie eine Datei stack.yaml in B Ordner. Zuerst kann der Inhalt sein:

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

extra-deps: [] 

Dann läuft es:

$ stack build

1

Sie müssen das Projekt nicht bin Verzeichnis der A enthalten - die eine falsche Fährte war.

Organisieren Sie Ihre Dateien wie folgen aus:

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

Dann in dem Top-Level-Verzeichnis läuft stack build:

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

Ihre Top-Level-stack.yaml Datei aussehen wird.