Come impedire a GHC di generare file intermedi?
Domanda
Quando si compila un file sorgente haskell tramite ghc --make foo.hs
GHC lascia sempre dietro una varietà di file intermedi diversi da foo.exe
. Questi sono foo.hi
e foo.o
.
Spesso finisco per eliminare i file .hi e .o per evitare di ingombrare le cartelle.
Esiste un'opzione della riga di comando affinché GHC non lasci indietro i suoi file intermedi? (Quando mi è stato chiesto su #haskell, la migliore risposta che ho ricevuto è stata ghc --make foo.hs & amp; & amp; rm foo.hi foo.o
.
Soluzione
Ho esaminato un po 'i documenti GHC e non sembra esserci un modo integrato per rimuovere automaticamente i file temporanei - dopotutto, GHC ha bisogno di quei 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 trovare che impostando il - outputdir
opzione ti aiuterà; che posizionerà tutti i file oggetto ( .o
), i file di interfaccia ( .hi
) e i file stub FFI nella directory specificata. È ancora " disordine, " ma almeno non è più nella tua directory di lavoro.
Altri suggerimenti
Il mio solito flusso di lavoro è usare direttamente la cabala piuttosto che ghc. Questo imposta l'opzione outputdir in una cartella di build appropriata e può fare cose come compilare la documentazione dell'eglefino per te. Tutto ciò di cui hai bisogno è definire il file .cabal per il tuo progetto e quindi dire installazione di cabala o build di cabala invece di eseguire direttamente ghc. Dato che alla fine devi seguire questo processo se vuoi condividere il tuo lavoro sugli hacker, è una buona pratica approfondire e aiuta anche a gestire le dipendenze dei pacchetti.
GHC ora ha le opzioni no- keep-hi-files
e no-keep-o-files
. Vedi qui per ulteriori informazioni.
Puoi 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.
Si scopre che l'uso di -hidir / -odir / -outputdir non va bene; / dev / null è un file e non una directory. Vedi http://www.haskell.org/pipermail/xmonad/2010 -May / 010182.html