2014-07-07 4 views
0

cabal을 통해 패키지를 다운로드하고 설치할 때 Cabal이 모든 것을 만들거나 필요한 것만 만들려고하는지 궁금합니다. 예를 들어 HaskellTemplate 확장이 분명히 필요한 패키지 포함 및 HaskellTemplate 모듈이 많이 있습니다. 이 확장 기능을 지원하지 않는 컴파일러를 사용하지만 어쨌든이 모듈을 사용하지 않기 때문에이 모듈에 관심이 없다면 어떻게 될까요?cabal, module and dependencies

+0

프로젝트가 컴파일되면 내 보낸 모듈이거나 내 보낸 모듈의 종속 파일 인 프로젝트의 모든 파일이 컴파일됩니다. 컴파일러 (예 : Hugs는'TypedHoles'와 같은 새로운 확장을 지원하지 않습니다. 컴파일이 실패합니다. – bheklilr

+0

좋습니다. 예를 들어 'th'모듈을 전혀 다른 패키지에 넣는 것이 좋습니다. – mb14

+0

[조건부 컴파일] (http://www.haskell.org/haskellwiki/Cabal/Developer-FAQ#Conditional_compilation) (자세한 정보 [here] (http://www.haskell.org/cabal/) users-guide/developing-packages.html # 의미 값 필드 - 사용 - 조건문))을 사용하면 각 모듈을 다른 모듈에 보관하고 컴파일러가 사용 된 조건에 따라 조건부로 내보낼 수 있습니다. – bheklilr

답변

0

cabal install 패키지를 hackage에서 가져온 경우 cabal은 해당 패키지의 모든 종속 항목도 설치해야합니다.

일반적으로 패키지의 모든 파일이 컴파일됩니다. 그러나 몇 가지 예외가 있습니다.

  1. 기본적으로 Cabal은 테스트 스위트 또는 벤치 마크를 빌드하지 않습니다.
  2. 패키지에 플래그가있는 경우 특정 플래그가 설정/해제되어 있으면 일부 모듈이 비활성화 될 수 있습니다. 플래그에 의해 보호되는 종속성이있을 수 있으며 플래그가 활성화 된 종속성을 충족시킬 수없는 경우 cabal은 자동으로 플래그를 비활성화/활성화하려고합니다. 점 2를 설명하기 위해

, 다음과 같은 패키지 정의가 있다면 : GHC에서 foo를 설치할 때, 이제

name: foo 
version: 0.1 

flag withGHC 
    default: True 
    manual: False # Allow cabal to figure out the correct value for the flag automatically 

library 
    exposed-modules: 
    Foo.Bar # This will always be compiled 
    if flag(withGHC) 
    build-depends: ghc 
    exposed-modules: 
     Foo.GHC # This will only be compiled when withGHC is True 

를, 음모는 그렇게, 심지어 활성화 플래그 Foo.GHC을 종속성을 satsify 수 있다는 것을 발견 할 것이다 지어 질 것이다.

그러나 다른 컴파일러로 foo을 설치하려고하면 cabl은 withGHC = True을 선택할 때 종속성 ghc으로 연결되는데이를 만족시킬 수 없습니다. 따라서 withGHC = False을 선택하고 Foo.GHC은 생성되지 않습니다.

+0

나는 그 도당이 사용할 깃발을 결정할 수 있다는 것을 몰랐습니다. 의존성이 존재하는 경우에만 무언가를 구축하는 방법이 있습니까? 그러나 그렇지 않은 경우에는 설치하지 않아도됩니다 (제한된 시간 내에 완료 될 수 있음에도 불구하고) – mb14