작업공간, 패키지, 대상

<ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 1박 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel은 디렉터리 트리에 구성된 소스 코드로 소프트웨어를 빌드합니다 하나의 작업공간입니다. 작업공간의 소스 파일은 중첩된 패키지의 계층 구조로, 여기서 각 패키지는 관련 소스 파일 1개 및 BUILD 파일 1개입니다. BUILD 파일은 소스로부터 소프트웨어 출력을 빌드할 수 있습니다

작업공간

작업공간은 소스가 포함된 파일 시스템의 디렉터리 트리입니다. 파일을 만듭니다. 각 작업공간에는 WORKSPACE: 비어 있거나 다음에 대한 참조를 포함할 수 있습니다. 출력을 빌드하는 데 필요한 외부 종속 항목

WORKSPACE라는 파일이 포함된 디렉터리는 살펴보겠습니다 따라서 Bazel은 루팅된 작업공간의 모든 디렉터리 트리를 무시합니다. 이 파일은 다른 작업공간을 형성하기 때문에 WORKSPACE 파일이 포함된 하위 디렉터리에 있습니다.

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

저장소

코드는 저장소에 구성됩니다. WORKSPACE가 포함된 디렉터리 파일은 기본 저장소의 루트이며 @라고도 합니다. 기타, (외부) 저장소는 작업공간 규칙을 사용하여 WORKSPACE 파일에서 정의됩니다.

Bazel과 함께 제공되는 작업공간 규칙은 작업공간 규칙 섹션의 백과사전 만들기삽입된 Starlark 저장소 규칙.

외부 저장소는 그 자체로 저장소이기 때문에 WORKSPACE 파일도 포함됩니다. 하지만 이러한 추가 WORKSPACE 파일은 Bazel이 무시했습니다. 특히 전이적으로 의존하는 저장소는 자동으로 추가되지 않습니다.

패키지

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

패키지는 BUILD이라는 파일이 포함된 디렉터리로 정의됩니다. (또는 BUILD.bazel). 패키지에는 디렉터리의 모든 파일과 더불어 그 아래에 있는 모든 하위 디렉토리로, 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 파일 대부분의 대상은 두 가지 주요 종류인 파일규칙 중 하나입니다.

파일은 다시 두 가지 종류로 나뉩니다. 소스 파일은 일반적으로 다른 사람의 작업물로 기록되고 저장소에 체크인했습니다. 생성된 파일(파생 파일 또는 출력 파일이라고도 함) 체크인되지 않지만 소스 파일에서 생성됩니다.

두 번째 유형의 대상은 규칙을 사용하여 선언합니다. 각 규칙 인스턴스는 입력 집합과 참조 집합 사이의 관계를 지정합니다. 출력 파일도 포함됩니다. 규칙에 대한 입력은 소스 파일일 수 있지만 다른 규칙의 출력일 수 있습니다.

규칙에 대한 입력이 소스 파일인지 또는 생성된 파일인지는 대부분의 경우 중요하지 않습니다. 중요한 것은 데이터의 내용만 파일에서 참조됩니다. 따라서 복잡한 소스 파일을 규칙에 의해 생성된 파일이 생성됩니다. 고도로 구조화된 파일을 수동으로 유지관리해야 하는 부담도 누군가 그것을 끌어내기 위해 프로그램을 작성합니다. 변경사항 없음 필수 정보를 제공해야 합니다. 반대로 로컬 파일만 포함된 소스 파일로 쉽게 대체될 수 있음 있습니다.

규칙에 대한 입력에는 다른 규칙도 포함될 수 있습니다. 이 이러한 관계의 정확한 의미는 종종 상당히 복잡하며 언어 또는 규칙에 의존하지만 직관적으로 간단합니다. C++ 라이브러리 규칙 A에는 입력에 대해 다른 C++ 라이브러리 규칙 B가 있을 수 있습니다. 이 종속 항목의 효과는 B의 헤더 파일이 B의 기호를 A에 사용할 수 있음 B의 런타임 데이터는 A가 보내는 동안 실행할 수 있습니다

모든 규칙의 불변은 규칙에 의해 생성된 파일이 항상 규칙 자체와 동일한 패키지에 속해야 합니다. 아닙니다 다른 패키지에 파일을 생성할 수 있습니다. 드문 일이 아닙니다. 다른 패키지에서 가져올 수 있습니다.

패키지 그룹은 접근성을 제한하는 것이 목적인 패키지 집합입니다. 특정 규칙의 역할을 할 수 있습니다. 패키지 그룹은 package_group 함수로 정의됩니다. 이 패키지에는 포함된 패키지 목록, 이름, 패키지라는 세 가지 속성이 있습니다. 다른 패키지 그룹이 포함됩니다 이러한 이름을 참조하는 유일한 방법은 규칙의 visibility 속성 또는 default_visibility에서 package 함수의 속성 파일을 생성하거나 사용하지 않습니다 자세한 내용은 package_group 문서

<ph type="x-smartling-placeholder"></ph> 라벨