2013-02-14 13 views
5

Ok, das sollte einfach sein, aber ich kann das nicht herausfinden. Ich habe zwei Projekte, ProjectA und ProjectB. ProjectB hängt vom alten Projekt ProjectA ab. Jetzt möchte ich ProjectB bauen. Und ich möchte jetzt nicht die Verzeichnisstruktur für ProjectA ändern. Problem ist, ich habe immer -outputdir bin mit ProjectA benutzt.Verknüpfen separater Projekte in GHC

ProjectA sah wie folgt aus:

ProjectA/ 
    bin/ 
    (*.o, *.hi in proper paths, sometimes also *.p_o and *.p_hi) 
    Foo/ 
    ModuleX.hs 
    ModuleA.hs 
    ModuleB.hs 

Jetzt habe ich einen anderen Ordner mit ProjectB haben, mit seinen eigenen separaten -outputdir. Ich muss nur auf die alten Projektobjektdateien verlinken (ohne dass ProjectA-Dateien neu kompiliert werden müssen). Ich realisiere, dass ich ProjectA wahrscheinlich verbalisieren kann ... aber gibt es keinen einfacheren Weg?

+0

scheint es mir, dass Sie ein Build-System benötigen. Wenn Sie nicht mögen Cabal (oder Makefiles) versuchen, schütteln (http://community.haskell.org/~ndm/shake/) – Jonke

+0

Danke, ich werde Schütteln überprüfen, aber ich brauche nicht wirklich einen Ersatz zu machen. In der Tat bin ich ein ziemlich glücklicher Benutzer von make jetzt. Das Problem ist, dass GHC diese seltsame Art der Suche nach .o und .hi Dateien zu haben scheint, die nicht ausreichend anpassbar sind. Mit anderen Worten, wenn ich -outputdir bin ... hinzufügen wird es nach vorkompilierten Dateien in bin suchen, und ich kann keine Möglichkeit finden, das zu ProjectA/bin zu ändern – Samee

Antwort

2

Der "einfache Weg" ist die Verwendung von Cabal. Sobald Sie Project A installiert haben, brauchen Sie sich nie mehr Gedanken darüber zu machen, wo es wirklich jemals wieder gespeichert wird. GHC wird es nur finden.

Wenn Sie dies nicht tun möchten, versuchen Sie den -i-Switch zu GHC zu verwenden, um zu ermitteln, in welchen Ordnern nach kompilierten Dateien gesucht werden soll.

http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/separate-compilation.html

+0

Ich habe bereits versucht -i vor dem Posten dieses. Alles was ich will, außer dass es auch alles in ProjectA neu kompiliert. Ich hatte gehofft, ein Analog für 'gcc x.o y.o' zu finden. – Samee

+0

Und wie für Cabal, das funktioniert, aber ich möchte dies nicht in meinem ~/.cabal Ordner fallen lassen, wenn ich nur dieses für 2-3 Projekte verwenden werde. Ich möchte nicht, dass dies für jedes Projekt in meinem Suchpfad steht. – Samee

+1

Interessant. Die Dokumentation behauptet, dass im '--make'-Modus nach _source_-Dateien im angegebenen Verzeichnis gesucht wird, andernfalls wird nach Interface- (und vermutlich nach Objekt-) Dateien gesucht. Natürlich, seit GHC 7 (?) '--make 'Modus ist jetzt immer der Standard, und ich bin mir nicht sicher, wie man es ausschaltet ... – MathematicalOrchid