Как остановить GHC от генерации промежуточных файлов? - PullRequest
38 голосов
/ 11 сентября 2009

При компиляции исходного файла haskell с помощью ghc --make foo.hs GHC всегда оставляет множество промежуточных файлов, отличных от foo.exe. Это foo.hi и foo.o.

Мне часто приходится удалять файлы .hi и .o, чтобы не загромождать папки.

Есть ли опция командной строки, чтобы GHC не оставлял свои промежуточные файлы? (Когда меня спросили на #haskell, лучший ответ, который я получил, был ghc --make foo.hs && rm foo.hi foo.o.

Ответы [ 5 ]

33 голосов
/ 11 сентября 2009

Я немного просмотрел документы GHC, и, похоже, не существует встроенного способа автоматического удаления временных файлов - в конце концов, GHC нужны эти промежуточные файлы для создания окончательного исполняемого файла, их присутствие ускоряет общую компиляцию, когда GHC знает, что не нужно перекомпилировать модуль.

Однако, вы можете обнаружить, что установка опции -outputdir поможет вам; это поместит все ваши объектные файлы (.o), файлы интерфейса (.hi) и файлы-заглушки FFI в указанный каталог. Это все еще "беспорядок", но, по крайней мере, его больше нет в вашем рабочем каталоге.

15 голосов
/ 11 сентября 2009

Мой обычный рабочий процесс заключается в прямом использовании cabal, а не ghc. Это устанавливает параметр outputdir в соответствующую папку для сборки и может выполнять такие вещи, как сборка документации Haddock. Все, что вам нужно, это определить файл .cabal для вашего проекта, а затем сказать, что установка cabal или сборка cabal вместо непосредственного запуска ghc. Поскольку в конце концов вам нужно следовать этому процессу, если вы захотите поделиться своей работой по взлому, это хорошая практика, и она также помогает управлять зависимостями пакетов.

8 голосов
/ 29 июня 2018

GHC теперь имеет опции no-keep-hi-files и no-keep-o-files. См. Здесь для получения дополнительной информации.

6 голосов
/ 12 сентября 2009

Вы можете установить -hidir в / dev / null, я думаю, отправив их туда. Кроме того, опция -fno-code в общем случае отключает большую часть вывода. Возможно, вы просто захотите использовать Cabal.

3 голосов
/ 13 мая 2010

Оказывается, что использование -hidir / -odir / -outputdir бесполезно; / dev / null - это файл, а не каталог. Смотри http://www.haskell.org/pipermail/xmonad/2010-May/010182.html

...