BUILD 파일

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

이전 섹션에서는 패키지, 대상 및 라벨, 종속 항목 그래프를 추상적으로 빌드합니다. 이 섹션에서는 구체적인 문법을 설명합니다. 패키지를 정의하는 데 사용됩니다.

정의에 따라 모든 패키지에는 BUILD 파일이 포함됩니다. 있습니다.

BUILD 파일은 명령형 언어를 사용하여 평가됩니다. Starlark

이는 문의 순차적 목록으로 해석됩니다.

일반적으로 순서는 중요합니다. 변수를 정의하기 전에 예로 들 수 있습니다 그러나 대부분의 BUILD 파일은 이러한 구문의 상대적 순서는 중요하지 않습니다. 모두 어떤 규칙이 어떤 값으로 선언되었는지 패키지 평가가 완료되는 시점입니다.

cc_library와 같은 빌드 규칙 함수가 실행되면 새 타겟을 추가할 수 있습니다. 이 타겟은 나중에 라벨을 사용하여 참조될 수 있습니다.

간단한 BUILD 파일에서 규칙 선언은 변경할 수 있습니다.

코드와 데이터를 명확하게 구분하기 위해 BUILD 파일은 함수 정의, for 문 또는 if 문을 포함해야 합니다. 이해와 if 표현식이 허용됩니다. 함수는 .bzl 파일을 사용하세요. 또한 *args**kwargs 인수는 BUILD개 파일에서 허용됨 대신 모든 인수를 명시적으로 나열합니다.

결정적으로 Starlark의 프로그램은 임의의 I/O를 실행할 수 없습니다. 이 불변량은 알려진 시스템에만 의존하여 BUILD 파일의 해석을 밀폐합니다. 입력 집합으로 구성되며, 이는 빌드를 재현 가능한지 확인하는 데 필수적입니다. 자세한 내용은 밀폐를 참조하세요.

BUILD 파일은 ASCII 문자만 사용하여 작성해야 하지만 기술적으로 Latin-1 문자 집합을 사용하여 해석됩니다.

BUILD 파일은 일반적으로 한 시스템의 여러 사람이 있습니다. BUILD 파일 작성자는 역할을 문서화하기 위해 자유롭게 댓글을 달아야 함 빌드 대상의 공개 용도인지 여부와 상관없이, 그리고 패키지의 역할을 문서화합니다

확장 프로그램 로드

Bazel 확장자는 .bzl로 끝나는 파일입니다. load 문을 사용하여 가져오기 가져올 수 있습니다.

load("//foo/bar:file.bzl", "some_library")

이 코드는 foo/bar/file.bzl 파일을 로드하고 some_library 기호를 추가합니다. 영향을 미칩니다 새 규칙, 함수, 상수를 로드하는 데 사용할 수 있습니다. (예: 문자열 또는 목록) 추가 인수를 load 호출에 추가합니다. 인수는 문자열 리터럴이어야 합니다. (변수 없음) 및 load 문은 최상위 수준에 나타나야 합니다. 함수 본문입니다.

load의 첫 번째 인수는 라벨로, .bzl 파일. 상대 라벨인 경우 현재 bzl 파일이 포함된 패키지 (디렉터리 아님)입니다. 상대 라벨 load 문은 선행 :를 사용해야 합니다.

load은 별칭도 지원하므로 가져올 수 있습니다.

load("//foo/bar:file.bzl", library_alias = "some_library")

하나의 load 문 내에 여러 별칭을 정의할 수 있습니다. 게다가 인수 목록에는 별칭과 일반 기호 이름이 모두 포함될 수 있습니다. 다음 는 완벽하게 허용됩니다 (따옴표 사용 시 참고).

load(":my_rules.bzl", "some_rule", nice_alias = "some_other_rule")

.bzl 파일에서 _(으)로 시작하는 기호는 내보낼 수 없으며 내보낼 수 없습니다. 다른 파일에서 로드한 것입니다.

로드 공개 상태를 사용하여 .bzl 파일을 로드할 수 있는 사용자

빌드 규칙의 유형

대부분의 빌드 규칙은 있습니다. 예: cc_binary, cc_librarycc_test는 C++ 바이너리의 빌드 규칙입니다. 각각 테스트와 라이브러리를 제공합니다 다른 언어도 동일하게 사용 다른 접두사를 사용한 이름 지정 체계(예: java_*) Java 이러한 함수 중 일부는 백과사전 만들기이지만 가능합니다 모든 사용자가 새 규칙을 만들 수 있습니다.

  • *_binary 규칙은 지정된 언어로 실행 가능한 프로그램을 빌드합니다. 빌드 시 실행 파일은 빌드 도구의 바이너리 규칙 라벨의 해당 이름에 대한 출력 트리를 따라서 //my:program은 예를 들어 $(BINDIR)/my/program에 표시됩니다.

    일부 언어에서는 이러한 규칙이 실행 파일 디렉터리를 만들기도 합니다. data에 언급된 모든 파일 포함 규칙에 속한 속성 또는 전이적 규칙의 모든 규칙 종속 항목 종료 이 파일 집합은 한곳에서 프로덕션으로 간편하게 배포할 수 있습니다.

  • *_test 규칙은 자동화에 사용되는 *_binary 규칙의 전문 분야입니다. 있습니다. 테스트는 성공 시 0을 반환하는 프로그램입니다.

    바이너리와 마찬가지로 테스트에는 runfile 트리와 그 아래에 테스트에서 합법적으로 열 수 있는 유일한 파일이 런타임 시 사용할 수 있습니다. 예를 들어 프로그램 cc_test(name='x', data=['//foo:bar'])은 실행 중에 $TEST_SRCDIR/workspace/foo/bar을 열고 읽을 수 있습니다. (각 프로그래밍 언어에는 고유한 유틸리티 함수가 있으며 $TEST_SRCDIR의 값에 액세스하지만 모두 환경 변수를 직접 사용하는 것과 같습니다.) 규칙을 준수하지 않으면 다음과 같은 경우 테스트가 실패합니다. 원격 테스트 호스트에서 실행됩니다.

  • *_library 규칙은 주어진 프로그래밍 언어라고 할 수 있습니다. 라이브러리는 다른 라이브러리에 종속될 수 있고 바이너리와 테스트는 라이브러리에 종속될 수 있으며, 예상되는 별도의 컴파일 동작을 수행해야 합니다.

라벨 종속 항목