2009-09-11 5 views
34

ghc --make foo.hs을 통해 haskell 소스 파일을 컴파일 할 때 GHC는 항상 foo.exe이 아닌 다양한 중간 파일을 남깁니다. 이들은 foo.hifoo.o입니다.GHC에서 중간 파일을 생성하는 것을 중단하는 방법은 무엇입니까?

종종 폴더가 어지럽히 지 않도록 .hi 및 .o 파일을 삭제해야합니다.

중간 파일을 남기지 않는 GHC 용 명령 줄 옵션이 있습니까? (#haskell에 대한 질문에 가장 좋은 대답은 ghc --make foo.hs && rm foo.hi foo.o입니다.

답변

30

GHC 문서를 조금 훑어 봤으며 임시 파일을 자동으로 제거하는 기본 방법이없는 것 같습니다. 결국 GHC는 최종 실행 파일을 만들기 위해 중간 파일이 필요하며 GHC가 모듈을 다시 컴파일 할 필요가 없다는 것을 알 때 전반적인 컴파일 속도가 향상됩니다.

그러나 setting the -outputdir option이 도움이 될 수 있습니다 ; 모든 오브젝트 파일 (.o), 인터페이스 파일 (.hi) 및 지정된 디렉토리에 FFI 스텁 파일을 저장합니다. "혼란 스럽지만"적어도 작업 디렉토리에는 더 이상 없습니다.

+0

이 질문은 오래된 것이지만이 팁은 매우 편리하다는 것을 알고 있습니다. ghc의'./zshrc'에 alias를 추가하여 명령 행에서 ghc를 실행할 때마다 모든 중간 파일을 폴더에 넣습니다. – djhworld

+1

음부 파일을 사용하지 않을 때는 보통 Windows에서), 언급 한 바와 같이'-outputdir'을 설정하고, makefile 내에서 자동으로 삭제하십시오. – MasterMastic

+1

쉘 스크립트를 작성하는 것이 더 쉽습니다. 제 의도는 프로그램을 테스트하는 것이었기 때문에, 나는'run.sh'를'ghc program.hs -outputdir dist && ./program && rm program && rm -rf dist /' – lucasarruda

15

내 일상적인 워크 플로는 ghc가 아닌 cabal을 직접 사용하는 것입니다. 이렇게하면 outputdir 옵션이 적절한 빌드 폴더에 설정되고 haddock 문서 빌드와 같은 작업을 수행 할 수 있습니다. 프로젝트에 .cabal 파일을 정의한 다음 ghc를 직접 실행하는 대신 cabal install 또는 cabal 빌드를 수행하면됩니다. 해커에 대한 작업을 공유하고 싶다면 결국이 프로세스를 따라야하므로, 들어가야하는 것이 좋으며 패키지 종속성도 관리하는 데 도움이됩니다.

+1

으로 작성했습니다. 그게 제가하는 일이기도합니다. 하나의 파일보다 큰 모든 하스켈 코드에 대해 나는 .cabal 파일을 설정했다. 즉, 나는 기존의 .cabal 파일을 어딘가에서 복사하고 수정한다. 누군가가'cabal --init' 명령을 사용하여 기본 작업 공간을 설정하고 있다고 생각합니다. 이는 매우 유용 할 것입니다. –

+0

저는 하스켈을 처음 보았습니다.하지만 그것은 내가 음모에 대해 정말 좋아하는 것입니다. cabal은 하나의 디렉토리 (dist)를 생성하고 모든 출력 파일을 빌드하는 동안 해당 디렉토리에 저장합니다. 그것은 다른 디렉토리를 깨끗하게 유지합니다. – davidbe

6

-hidir을/dev/null로 설정할 수 있습니다. 거기에 보내면됩니다. 또한 -fno-code 옵션은 일반적으로 많은 출력을 끕니다. Cabal을 사용하고 싶을 수도 있습니다.