Как остановить GHC от генерации промежуточных файлов?
Вопрос
При компиляции исходного файла haskell с помощью ghc --make foo.hs
GHC всегда оставляет различные промежуточные файлы, кроме foo.exe
. Это foo.hi
и foo.o
.
Мне часто приходится удалять файлы .hi и .o, чтобы не загромождать папки.
Есть ли опция командной строки, чтобы GHC не оставлял свои промежуточные файлы? (Когда меня спросили на #haskell, лучший ответ, который я получил, был ghc --make foo.hs & amp; rm foo.hi foo.o
.
Решение
Я немного просмотрел документы GHC, и, похоже, не существует встроенного способа автоматического удаления временных файлов - в конце концов, GHC нужны эти промежуточные файлы для создания окончательного исполняемого файла, и их присутствие ускоряет общую компиляцию, когда GHC знает, что не нужно перекомпилировать модуль.
Однако вы можете обнаружить, что настраивает - опция outputdir
поможет вам; это поместит все ваши объектные файлы ( .o
), файлы интерфейса ( .hi
) и файлы-заглушки FFI в указанный каталог. Это все еще "беспорядок", " но, по крайней мере, его больше нет в вашем рабочем каталоге.
Другие советы
Мой обычный рабочий процесс заключается в прямом использовании cabal, а не ghc. Это устанавливает параметр outputdir в соответствующую папку для сборки и может выполнять такие вещи, как сборка документации Haddock. Все, что вам нужно, это определить файл .cabal для вашего проекта, а затем сказать, что установка cabal или сборка cabal вместо непосредственного запуска ghc. Поскольку в конце концов вам нужно следовать этому процессу, если вы хотите поделиться своей работой по взлому, это хорошая практика, и она также помогает управлять зависимостями пакетов.
GHC теперь имеет опции no- keep-hi-files
и no-keep-o-files
. См. здесь для получения дополнительной информации. р>
Вы можете установить -hidir в / dev / null, я думаю, отправив их туда. Кроме того, опция -fno-code в общем случае отключает большую часть вывода. Возможно, вы просто захотите использовать Cabal.
Оказывается, использование -hidir / -odir / -outputdir бесполезно; / dev / null - это файл, а не каталог. См. http://www.haskell.org/pipermail/xmonad/2010. -май / 010182.html р>