cabal을 통해 패키지를 다운로드하고 설치할 때 Cabal이 모든 것을 만들거나 필요한 것만 만들려고하는지 궁금합니다. 예를 들어 HaskellTemplate 확장이 분명히 필요한 패키지 포함 및 HaskellTemplate 모듈이 많이 있습니다. 이 확장 기능을 지원하지 않는 컴파일러를 사용하지만 어쨌든이 모듈을 사용하지 않기 때문에이 모듈에 관심이 없다면 어떻게 될까요?cabal, module and dependencies
0
A
답변
0
cabal install
패키지를 hackage에서 가져온 경우 cabal은 해당 패키지의 모든 종속 항목도 설치해야합니다.
일반적으로 패키지의 모든 파일이 컴파일됩니다. 그러나 몇 가지 예외가 있습니다.
- 기본적으로 Cabal은 테스트 스위트 또는 벤치 마크를 빌드하지 않습니다.
- 패키지에 플래그가있는 경우 특정 플래그가 설정/해제되어 있으면 일부 모듈이 비활성화 될 수 있습니다. 플래그에 의해 보호되는 종속성이있을 수 있으며 플래그가 활성화 된 종속성을 충족시킬 수없는 경우 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
프로젝트가 컴파일되면 내 보낸 모듈이거나 내 보낸 모듈의 종속 파일 인 프로젝트의 모든 파일이 컴파일됩니다. 컴파일러 (예 : Hugs는'TypedHoles'와 같은 새로운 확장을 지원하지 않습니다. 컴파일이 실패합니다. – bheklilr
좋습니다. 예를 들어 'th'모듈을 전혀 다른 패키지에 넣는 것이 좋습니다. – mb14
[조건부 컴파일] (http://www.haskell.org/haskellwiki/Cabal/Developer-FAQ#Conditional_compilation) (자세한 정보 [here] (http://www.haskell.org/cabal/) users-guide/developing-packages.html # 의미 값 필드 - 사용 - 조건문))을 사용하면 각 모듈을 다른 모듈에 보관하고 컴파일러가 사용 된 조건에 따라 조건부로 내보낼 수 있습니다. – bheklilr