2009-09-11 6 views
34

Lors de la compilation d'un fichier source haskell via ghc --make foo.hs GHC laisse toujours derrière une variété de fichiers intermédiaires autres que foo.exe. Ce sont foo.hi et foo.o.Comment empêcher GHC de générer des fichiers intermédiaires?

Je finis souvent par devoir supprimer les fichiers .hi et .o pour éviter d'encombrer les dossiers.

Existe-t-il une option de ligne de commande permettant à GHC de ne pas laisser de côté ses fichiers intermédiaires? (Quand on m'a demandé #haskell, la meilleure réponse que j'ai eue était ghc --make foo.hs && rm foo.hi foo.o

Répondre

30

J'ai parcouru un peu les docs de GHC, et il ne semble pas y avoir de façon intégrée de supprimer automatiquement les fichiers temporaires - - après tout, GHC a besoin de ces fichiers intermédiaires pour construire l'exécutable final, et leur présence accélère la compilation globale quand GHC sait qu'il n'est pas obligé de recompiler un module

Cependant, vous pourriez trouver que setting the -outputdir option vous aidera Cela placera tous vos fichiers objets (.o), les fichiers d'interface (.hi) et les fichiers de raccord FFI dans le répertoire spécifié. Il est toujours "encombré", mais au moins il ne se trouve plus dans votre répertoire de travail

+0

Je sais que cette question est ancienne mais cette astuce est très pratique. J'ai ajouté un alias à mon './Zshrc' pour ghc de mettre tous les fichiers intermédiaires dans un dossier chaque fois que je lance ghc depuis la ligne de commande – djhworld

+1

Quand je n'utilise pas cabal, j'écris habituellement un makefile (même sous Windows), définissez '-outputdir' comme indiqué et supprimez-le automatiquement dans le fichier makefile. – MasterMastic

+1

Je trouve aussi plus facile d'écrire un script shell. Puisque mon intention était juste de tester un programme, j'ai juste écrit un 'run.sh' avec' ghc program.hs -outputdir dist && ./program && rm program && rm -rf dist/' – lucasarruda

15

Mon flux de travail habituel consiste à utiliser directement cabal plutôt que ghc. Cela définit l'option outputdir dans un dossier de construction approprié et peut faire des choses comme construire la documentation haddock pour vous. Tout ce dont vous avez besoin est de définir le fichier .cabal pour votre projet, puis dites cabal install ou cabal build au lieu d'exécuter ghc directement. Puisque vous devez suivre ce processus à la fin si vous voulez partager votre travail sur le hackage, c'est une bonne pratique à suivre et cela aide aussi à gérer les dépendances de paquets.

+1

C'est ce que je fais aussi bien. Pour chaque morceau de code Haskell plus gros qu'un seul fichier, j'installe un fichier .cabal. C'est-à-dire, je copie juste un dossier .cabal existant de quelque part et le modifie. Je pense que quelqu'un travaille sur une commande 'cabal --init' pour configurer un espace de travail par défaut, ce qui serait très utile. –

+0

Je suis assez nouveau pour Haskell, mais c'est quelque chose que j'aime beaucoup chez cabal. cabal crée un répertoire (dist) et place tous les fichiers de sortie dans ce répertoire pendant la construction. Il garde les autres annuaires propres. – davidbe

6

Vous pouvez définir -hidir sur/dev/null, je pense, en les envoyant là. En outre, l'option -fno-code désactive généralement beaucoup de sortie. Vous pourriez juste vouloir utiliser Cabal.

Questions connexes