2009-09-11 16 views
34

Quando si compila un file di origine haskell tramite ghc --make foo.hs GHC lascia sempre una serie di file intermedi diversi da foo.exe. Questi sono foo.hi e foo.o.Come impedire a GHC di generare file intermedi?

Spesso finisco per dover cancellare i file .hi e .o per evitare di ingombrare le cartelle.

Esiste un'opzione della riga di comando per GHC per non lasciare indietro i suoi file intermedi? (Alla domanda su #haskell, la risposta migliore che ho ottenuto è stata ghc --make foo.hs && rm foo.hi foo.o.

risposta

30

Ho esaminato un po 'i documenti di GHC e non sembra essere un modo incorporato per rimuovere automaticamente i file temporanei: - dopo tutto, GHC ha bisogno di questi file intermedi per costruire l'eseguibile finale e la loro presenza accelera la compilazione generale quando GHC sa che non è necessario ricompilare un modulo

Tuttavia, potresti scoprire che ti aiuterà ; questo posizionerà tutti i file oggetto (.o), i file di interfaccia (.hi) e i file stub FFI nella directory specificata.Esso è ancora "ingombrante", ma almeno non è più nella directory di lavoro.

+0

So che questa domanda è vecchia ma questo suggerimento è molto utile. Ho aggiunto un alias al mio './Zshrc' per ghc per mettere tutti i file intermedi in una cartella ogni volta che eseguo ghc dalla riga di comando – djhworld

+1

Quando non uso la cabal, di solito scrivo un makefile (anche su Windows), imposta '-outputdir' come accennato e cancellalo automaticamente dal makefile. – MasterMastic

+1

Trovo anche più semplice scrivere uno script di shell. Dato che la mia intenzione era solo di testare un programma, ho appena scritto un 'run.sh' con' ghc program.hs -outputdir dist && ./program && rm program && rm -rf dist/' – lucasarruda

15

Il mio solito flusso di lavoro consiste nell'utilizzare direttamente la cabal piuttosto che ghc. Questo imposta l'opzione outputdir in una cartella di build appropriata e può fare cose come la compilazione della documentazione di hadock per te. Tutto ciò di cui hai bisogno è di definire il file .cabal per il tuo progetto e quindi di installare cabal o build cabal invece di eseguire ghc direttamente. Dal momento che è necessario seguire questo processo alla fine se si desidera condividere il proprio lavoro su hackage, è una buona pratica entrare e aiuta a gestire anche le dipendenze dei pacchetti.

+1

Questo è quello che faccio pure. Per ogni pezzo di codice Haskell più grande di un singolo file, ho impostato un file .cabal. Cioè, copio solo un file .cabal esistente da qualche parte e lo modifico. Penso che qualcuno stia lavorando su un comando 'cabal --init' per impostare uno spazio di lavoro predefinito, che sarebbe abbastanza utile. –

+0

Sono abbastanza nuovo per Haskell, ma è una cosa che mi piace molto della cabala. cabal crea una directory (dist) e inserisce tutti i file di output in quella directory durante la creazione. Mantiene pulite altre directory. – davidbe

6

È possibile impostare -hidir su/dev/null, penso, inviandoli lì. Inoltre, l'opzione -fno-code in generale disattiva un sacco di output. Potresti semplicemente voler usare Cabal.