이 종속성 테이블을 어떻게 읽어야 합니까? [폐쇄]

이 종속성 테이블을 어떻게 읽어야 합니까? [폐쇄]

https://nixos.org/manual/nixpkgs/stable/#ssec-stdenv-dependent-reference설명하다

다른 전이적(비직접) 다운스트림 종속성도 직접 종속성으로 요구하는 경우 종속성이 전파된다고 합니다. [삼]

종속성은 반드시 이전과 동일한 유형의 종속성으로 전파되는 것이 아니라 플랫폼 규칙이 일관성을 유지하도록 해당 유형으로 전파된다는 점에 유의하는 것이 중요합니다. 종속성 전파에 대한 정확한 규칙을 결정하기 위해 먼저 각 종속성에 여러 삼항 숫자(빌드의 경우 -1, 호스트의 경우 0, 대상의 경우 1)를 할당하여 호스트와 대상을 캡처하는 종속성 유형을 나타냅니다. 플랫폼 상황은 각각에 따라 다릅니다. 파생된 호스트와 대상 플랫폼의 "오프셋"입니다. 아래 표에는 사용 가능한 다양한 조합이 요약되어 있습니다.

host → target         attribute name          offset
build --> build       depsBuildBuild          -1, -1
build --> host        nativeBuildInputs       -1, 0
build --> target      depsBuildTarget         -1, 1
host --> host         depsHostHost            0, 0
host --> target       buildInputs             0, 1
target --> target     depsTargetTarget        1, 1

표를 읽는 방법을 알고 싶습니다.

"Host → Target" 및 "Build --> Build"의 화살표는 무엇을 의미하나요?

오프셋은 어떻게 계산되나요?

답변1

Nix 패키지 관리의 맥락에서 패키지 간의 종속성은 관계 네트워크로 이해될 수 있습니다. 분석해 보겠습니다.

1. 의존축:

  • 플랫폼 관계:Windows, Mac, Linux 등 다양한 컴퓨터 시스템이나 플랫폼을 고려해보세요. 프로그램은 각 프로그램에서 원활하게 실행되기 위해 서로 다른 사항이 필요할 수 있습니다.
  • 확산:연쇄반응같네요. 경우에 따라 패키지 A에 패키지 B가 필요하고 패키지 C에 패키지 A가 필요한 경우 패키지 C에는 간접적으로 패키지 B가 필요합니다.

2. 호스트 및 대상 플랫폼을 이해합니다.

  • 호스트 플랫폼:이는 패키지를 빌드하기 위한 기본 환경과 같습니다.
  • 대상 플랫폼:이는 패키지가 실행되는 환경입니다.

3. 양식 설명 및 예시:

Mac(호스트 플랫폼)에서 "CoolApp"이라는 프로그램을 구축한다고 가정해 보겠습니다. 이 프로그램이 제대로 작동하려면 다양한 라이브러리가 필요합니다. 이 표는 어떤 라이브러리가 필요하며 플랫폼 측면에서 서로 어떻게 관련되어 있는지 이해하는 데 도움이 됩니다.

  • "빌드 -> 빌드"(depsBuildBuild, -1, -1):CoolApp에는 빌드 프로세스 중에도 사용되는 일부 특정 라이브러리가 필요하다고 상상해 보십시오. 이는 CoolApp을 만드는 동안에만 필요한 빌딩 블록과 같습니다.

  • "빌드-->호스트"(nativeBuildInputs, -1, 0):이는 CoolApp 빌드 프로세스 중에 필요한 도구 또는 라이브러리일 수 있지만 Mac 환경에만 해당됩니다.

  • "빌드 -> 대상"(depsBuildTarget, -1, 1):이는 Linux와 같은 다른 플랫폼에서 애플리케이션을 실행하기 위해 CoolApp 빌드 중에 필요한 라이브러리일 수 있습니다.

  • "호스트 --> 호스트" (depsHostHost, 0, 0):CoolApp을 실행하려면 일부 Mac 전용 라이브러리가 필요하다고 상상해 보세요. 마치 Mac 세계에 사는 친구들과도 같습니다.

  • "호스트 --> 대상"(buildInputs, 0, 1):이는 Linux와 같은 다른 플랫폼에서 실행하기 위해 CoolApp에 필요한 추가 라이브러리일 수 있습니다.

  • "대상-->대상"(depsTargetTarget, 1, 1):이는 Linux에서 CoolApp을 실행하는 데 필요한 라이브러리일 수 있지만 Mac에서 빌드 프로세스 중에는 필요하지 않을 수도 있습니다.

4. 실제 영향:

이러한 종속성을 이해하면 Nix 패키지 관리자가 환경을 올바르게 설정하는 데 도움이 됩니다. 이는 CoolApp이 Mac에서 구축된 다음 Linux에서 사용될 때 어떤 부분도 잃지 않고 두 위치 모두에서 원활하게 실행하는 데 필요한 모든 것을 갖추고 있음을 보장합니다.

따라서 이 표는 CoolApp이 다양한 플랫폼에서 완벽하게 실행되도록 보장하기 위해 패키지 관리자에게 어떤 부분(라이브러리 또는 종속성)을 포함해야 하는지, 퍼즐의 어디에 해당하는지 안내하는 로드맵과 같습니다.

관련 정보