2013-02-14 12 views
5

Ok powinno być proste, ale nie może tego zrozumieć. Mam dwa projekty, ProjectA i ProjectB. ProjectB zależy od starego projektu, ProjectA. Teraz chcę zbudować ProjectB. I nie chcę teraz zmieniać struktury katalogów dla ProjectA. Problem polega na tym, że zawsze użyłem -outputdir bin z ProjectA.Łączenie oddzielnych projektów w GHC

Projecta wyglądał następująco:

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

Teraz mam inny folder z ProjectB z własnym osobnym -outputdir. Muszę tylko połączyć się ze starymi plikami obiektów projektu (bez ponownej kompilacji plików ProjectA). Zdaję sobie sprawę, że mogę prawdopodobnie kabalizować ProjectA ... ale czy nie ma prostszego sposobu?

+0

wydaje mi się, że potrzebny jest system kompilacji. Jeśli nie lubisz cabal (lub makefiles) spróbuj shake (http://community.haskell.org/~ndm/shake/) – Jonke

+0

Dzięki, sprawię, że się potrząśniesz, ale tak naprawdę nie potrzebuję wymiany. W rzeczywistości jestem teraz szczęśliwym użytkownikiem make. Problem polega na tym, że GHC wydaje się mieć dziwny sposób wyszukiwania plików .o i .hi, które nie wydają się wystarczająco konfigurowalne. Innymi słowy, jeśli dodaję -outputdir bin ... będzie szukał skompilowanych plików w bin, i nie mogę znaleźć sposobu na zmianę tego do ProjectA/bin – Samee

Odpowiedz

2

"Prostą drogą" jest użycie Cabal. Po zainstalowaniu Projektu A nigdy nie musisz się martwić, gdzie to, do cholery, jest przechowywane ponownie; GHC to po prostu znajdzie.

Jeśli nie chcesz tego robić, spróbuj użyć przełącznika -i w GHC, aby określić foldery do wyszukiwania kompilowanych materiałów.

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

+0

Próbowałem już -i przed opublikowaniem tego. Czy wszystko, co chcę, oprócz tego, że rekompiluje wszystko w ProjectA. Miałem nadzieję znaleźć odpowiednik dla "gcc x.o y.o". – Samee

+0

A jeśli chodzi o Cabala, to działa, ale nie chcę tego upuszczać w folderze ~/.cabal, kiedy będę go używał tylko dla 2-3 projektów. Nie chcę, aby było to na mojej ścieżce wyszukiwania dla każdego projektu w historii. – Samee

+1

Interesujące. Dokumentacja mówi, że w trybie '--make' będzie szukać plików _source_ w określonym katalogu, ale w przeciwnym razie będzie szukał plików interfejsu (i prawdopodobnie obiektów). Oczywiście, ponieważ tryb GHC 7 (?) '--make' jest teraz zawsze domyślny i nie jestem pewien jak go wyłączyć ... – MathematicalOrchid