작업공간, 패키지, 대상

문제 신고 소스 보기 Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel은 워크스페이스라는 디렉터리 트리에 구성된 소스 코드에서 소프트웨어를 빌드합니다. 작업공간의 소스 파일은 패키지로, 여기서 각 패키지는 관련 패키지 모음이 포함된 소스 파일 1개와 BUILD 파일 1개 BUILD 파일은 소스에서 출력을 빌드할 수 있습니다

작업공간

작업공간은 소스가 포함된 파일 시스템의 디렉터리 트리입니다. 파일을 만듭니다. 각 작업공간에는 WORKSPACE: 비어 있거나 external 종속 항목을 포함합니다.

WORKSPACE라는 파일이 포함된 디렉터리는 작업공간의 루트로 간주됩니다. 따라서 Bazel은 다른 작업공간을 형성하는 WORKSPACE 파일이 포함된 하위 디렉터리입니다.

Bazel은 WORKSPACE.bazel 파일을 WORKSPACE 파일의 별칭으로 지원합니다. 두 파일이 모두 있으면 WORKSPACE.bazel가 사용됩니다.

저장소

코드는 repositories에 구성됩니다. WORKSPACE가 포함된 디렉터리 파일은 기본 저장소의 루트이며 @라고도 합니다. 기타, (외부) 저장소가 작업공간 규칙을 사용하여 WORKSPACE 파일에서 정의됩니다. Bzlmod 시스템의 모듈 및 확장 프로그램에서 생성됩니다. 자세한 내용은 외부 종속 항목 개요를 참고하세요.

Bazel과 번들로 제공되는 작업공간 규칙은 빌드 백과사전작업공간 규칙 섹션과 삽입된 Starlark 저장소 규칙 문서에 설명되어 있습니다.

외부 저장소는 저장소 자체이므로 WORKSPACE 파일도 포함되는 경우가 많습니다. 그러나 이러한 추가 WORKSPACE 파일은 Bazel에서 무시됩니다. 특히 전이적으로 종속된 저장소는 자동으로 추가되지 않습니다.

패키지

저장소의 기본 코드 구성 단위는 패키지입니다. 가 패키지는 관련 파일의 모음이며 출력 아티팩트를 생성하는 데 사용됩니다

패키지는 이름이 BUILD 또는 BUILD.bazelBUILD 파일입니다. 패키지에는 자체적으로 BUILD 파일을 포함하는 디렉터리를 제외한 디렉터리의 모든 파일과 그 아래의 모든 하위 디렉터리가 포함됩니다. 이 정의에 따라 어떤 파일이나 디렉터리도 두 개의 서로 다른 패키지에 속할 수 없습니다.

예를 들어 다음 디렉터리 트리에는 두 개의 패키지(my/app)와 하위 패키지(my/app/tests)가 있습니다. my/app/data는 패키지가 아니지만 my/app 패키지에 속한 디렉터리

src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc

대상

패키지는 패키지의 BUILD 파일에 정의된 타겟의 컨테이너입니다. 대부분의 타겟은 파일규칙이라는 두 가지 기본 유형 중 하나입니다.

파일은 다시 두 가지 종류로 나뉩니다. 소스 파일은 일반적으로 소스 파일에 의해 저장소에 체크인했습니다. 생성된 파일, 경우에 따라서는 파생 파일 또는 출력 파일이라고도 하며, 체크인되지는 않지만 소스 파일에서 생성됩니다.

두 번째 종류의 타겟은 규칙을 사용하여 선언합니다. 각 규칙 인스턴스는 입력 파일 세트와 출력 파일 세트 간의 관계를 지정합니다. 이 규칙에 대한 입력은 소스 파일일 뿐만 아니라 있습니다.

규칙의 입력이 소스 파일인지 생성된 파일인지 여부는 대부분 중요하지 않습니다. 중요한 것은 해당 파일의 콘텐츠뿐입니다. 이 사실 복잡한 소스 파일을 Google Cloud에서 생성한 파일로 쉽게 예를 들어 고도의 데이터를 수동으로 유지관리해야 하는 부담이 있는 경우 너무 번거롭게 만들고, 누군가가 그 파일을 파생하기 위해 프로그램을 작성합니다. 이 파일의 소비자는 변경할 필요가 없습니다. 반대로 생성된 파일은 로컬 변경사항만 있는 소스 파일로 쉽게 대체할 수 있습니다.

규칙의 입력에는 다른 규칙도 포함될 수 있습니다. 이러한 관계의 정확한 의미는 종종 매우 복잡하고 언어 또는 규칙에 따라 다르지만 직관적으로는 간단합니다. C++ 라이브러리 규칙 A에는 입력용 C++ 라이브러리 규칙 B가 있을 수 있습니다. 이 종속 항목의 효과는 B의 헤더 파일이 B의 기호가 컴파일 중에 A에 제공되며, B의 런타임 데이터가 실행 중에 A에 제공됩니다.

모든 규칙의 불변은 규칙에 의해 생성된 파일이 항상 규칙 자체와 동일한 패키지 컴퓨터에 파일을 생성하는 것은 있습니다. 하지만 규칙의 입력이 다른 패키지에서 가져오는 경우도 흔히 있습니다.

패키지 그룹은 특정 규칙의 액세스 가능성을 제한하는 목적으로 하는 패키지 집합입니다. 패키지 그룹은 package_group 함수로 정의됩니다. 패키지 그룹에는 포함된 패키지 목록, 이름, 포함된 다른 패키지 그룹이라는 세 가지 속성이 있습니다. 이러한 이름을 참조하는 데 허용되는 유일한 방법은 규칙의 visibility 속성 또는 다음의 default_visibility 속성에서 package 함수 파일을 생성하거나 사용하지 않습니다 자세한 내용은 package_group 문서를 참고하세요.

라벨