Как остановить GHC от создания промежуточных файлов?
При компиляции исходного файла 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
.
Ответы
Ответ 1
Я прошел через документы GHC немного, и, похоже, нет встроенного способа автоматического удаления временных файлов. В конце концов, GHC нуждается в этих промежуточных файлах для создания окончательного исполняемого файла и их присутствие ускоряет общую компиляцию, когда GHC знает, что ей не нужно перекомпилировать модуль.
Однако вы можете обнаружить, что установка опции -outputdir
поможет вам; который поместит все ваши объектные файлы (.o
), файлы интерфейса (.hi
) и файлы FFI-заглушки в указанный каталог. Он все еще "загромождает", но, по крайней мере, он больше не работает в вашем рабочем каталоге.
Ответ 2
Мой обычный рабочий процесс - использовать cabal, а не ghc напрямую. Это устанавливает параметр outputdir в соответствующую сборную папку и может делать такие вещи, как сборка документации для бухгалтерии для вас. Все, что вам нужно, - это определить файл .cabal для вашего проекта, а затем сказать, что установка cabal или cabal build вместо прямого запуска ghc. Поскольку в конце концов вам необходимо следовать этому процессу, если вы когда-либо захотите поделиться своей работой с хакером, это хорошая практика, и вы также можете управлять зависимостями пакетов.
Ответ 3
Вы можете установить -hidir в /dev/null, я думаю, отправив их туда. Кроме того, опция -fno-code вообще отключает много выходных данных. Вы можете просто использовать Cabal.
Ответ 4
Оказывается, что использование -hidir/-odir/-outputdir не подходит; /dev/null - это файл, а не каталог. См. http://www.haskell.org/pipermail/xmonad/2010-May/010182.html