2014-11-06 10 views
12

내가 선을 보이지 않는, 즉,이 컴파일되지 않은,의 내가 더는 HsColour 프로그램이 설치가없는 가정하자 나는 다시 QuickCheck를 설치하면 나는 QuickCheckHsColour 이진 파일의 존재/부재가 QuickCheck 라이브러리를 다시 컴파일해야하는 이유는 무엇입니까?

$ cd /tmp/ 
$ cabal get QuickCheck 
$ cd QuickCheck 
$ cabal install 
... 
[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 
... 
Installed QuickCheck-2.7.6 

를 설치

[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 

하지만 HsColour 최신 버전 (1.20.3)을 설치하고 QuickCheck를 다시 설치하면 QuickCheck가 다시 컴파일됩니다.

  1. 내가 HsColour를 설치,
  2. 내가 QuickCheck를 설치,
  3. 내가 HsColour 바이너리 제거하고
  4. 내가 QuickCheck을 설치하는 경우

    QuickCheck도 다시 컴파일됩니다.

나는 GHC 7.8.3, 음모 1.20.0.2로이 동작을 테스트 1.20.0.3을 음모 설치, 그리고 음모와의 개발 버전 (https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4 사용) 음모는 설치합니다.

+0

이상한. 도서관 문서를 사용하도록 설정 했습니까? –

+0

아니요,이 옵션을 설정하지 않았습니다. – asr

+0

샌드 박스 내에서 "cabal install --disable-documentation"을 사용하여이 동작을 복제 할 수 있습니다. 또한, 나는 이것을 오래된 old "runhaskell Setup.lhs configure - user && runhaskell Setup.lhs"로 복제 할 수있다. (문서를 활성화/비활성화하는 것은 실제로 들어 가지 않는다.); 가장 좋은 추측은 구성이 변경되기 때문에 모든 것을 다시 빌드해야한다는 것입니다. – ivanm

답변

1

저는 전문가는 아니지만 그가 알고 있고 발견 할 수있는 모든 빌드 도구를 구성한다고 믿습니다. 빌드 할 때, cabal은 빌드 도구 버전을 테스트 할 매크로가있는 cabal_macros.h 파일을 생성합니다. CPP 확장명을 사용하도록 설정하면 파일이 모든 위치에 포함되며 모든 변경 내용은 모두 cabal_macros.h에 다시 작성됩니다.

+0

참고 : 당신이 현상금을 얻고있어 단서가있어 노력을 기울여서 현상금을 낭비하지 않기를 바랍니다. 대답이 실제로 맞으면 아무 생각도 * 가지지 않습니다. – dfeuer

+0

테스트하는 한 가지 방법 :'cabal-macros.h' 파일을 얻고, 새로운 vs old 파일을 다시 구성하고, 새로운 파일을 오래된 파일로 바꾸는 것이 여전히 재구성을 일으키는 지 확인하십시오. – ivanm

+0

@ivanm'cabal-macros.h '를 변경하면 확실히'CPP'가 활성화 된 모듈의 재 컴파일이 시작됩니다. 나는 매일 그것을 보았다 (그리고 나는 그 이유로 CPP 사용을 최소화하려고 노력한다.) 왜 cabal이 * 모든 * 빌드 도구를 구성하는지 모르겠습니다. 아마 이유가 있지만, 나는 모른다. – Yuras