2009-09-11 15 views
34

Podczas kompilowania pliku źródłowego haskell za pośrednictwem ghc --make foo.hs GHC zawsze pozostawia wiele różnych plików pośrednich innych niż foo.exe. Są to foo.hi i foo.o.Jak zatrzymać GHC w generowaniu plików pośrednich?

Często kończę usuwanie plików .hi i .o, aby uniknąć zaśmiecenia folderów.

Czy istnieje opcja linii poleceń dla GHC, aby nie pozostawić plików pośrednich? (Na pytanie #haskell, najlepszą odpowiedzią było: ghc --make foo.hs && rm foo.hi foo.o.

Odpowiedz

30

Przeszedłem trochę przez dokumenty GHC i nie ma wbudowanego sposobu automatycznego usuwania plików tymczasowych - - w końcu GHC potrzebuje tych pośrednich plików do zbudowania ostatecznego pliku wykonywalnego, a ich obecność przyspiesza ogólną kompilację, gdy GHC wie, że nie musi rekompilować modułu,

Jednak może się okazać, że setting the -outputdir option pomoże ci ;, które umieści wszystkie pliki obiektów (.o), pliki interfejsu (.hi) i pliki pośredniczące FFI w określonym katalogu.To nadal jest "bałaganem", ale przynajmniej nie ma go już w katalogu roboczym

+0

Wiem, że to pytanie jest stare, ale ta wskazówka jest bardzo przydatna. Dodałem alias do mojego './Zshrc' dla ghc, aby umieścić wszystkie pliki pośrednie w folderze za każdym razem, gdy uruchomię ghc z linii poleceń – djhworld

+1

Kiedy nie używam cabal, zazwyczaj piszę plik Makefile (nawet w systemie Windows), ustaw '-outputdir' jak wspomniano i usuń go automatycznie z pliku makefile. – MasterMastic

+1

Ułatwiłem też napisanie skryptu powłoki. Ponieważ moim zamiarem było tylko przetestowanie programu, napisałem właśnie 'run.sh' z' ghc program.hs -outputdir dist && ./program && rm program && rm -rf dist/' – lucasarruda

15

Mój zwykły przepływ pracy polega na użyciu bezpośrednio cabal zamiast ghc. Ustawi to opcję outputdir w odpowiednim folderze kompilacji i może zrobić dla ciebie takie rzeczy jak kompilacja dokumentacji plamiaka. Wszystko, czego potrzebujesz, to zdefiniować plik .cabal dla twojego projektu, a następnie powiedz "cabal install" lub "cabal build", zamiast uruchamiać ghc bezpośrednio. Ponieważ musisz w końcu wykonać ten proces, jeśli chcesz podzielić się swoją pracą z hackage, dobrym pomysłem jest skorzystanie z niego i pomaga to w zarządzaniu zależnościami pakietowymi.

+1

To też robię. Dla każdego fragmentu kodu Haskella, który jest większy niż pojedynczy plik, ustawiam plik .cabal. To znaczy, po prostu skopiuj istniejący plik .cabal skądś i zmodyfikuj go. Myślę, że ktoś pracuje nad komendą 'cabal --init', aby ustawić domyślną przestrzeń roboczą, co byłoby całkiem przydatne. –

+0

Jestem całkiem nowy dla Haskella, ale to coś, co naprawdę lubię w kabale. cabal tworzy jeden katalog (dist) i umieszcza wszystkie pliki wyjściowe w tym katalogu podczas budowania. Utrzymuje inne katalogi w czystości. – davidbe

6

Możesz ustawić -hidir na/dev/null, jak sądzę, wysyłając je tam. Poza tym opcja -fno-code generalnie wyłącza wiele danych wyjściowych. Możesz po prostu użyć Cabal.