이 페이지에서는 매크로를 사용하여 BUILD 언어를 확장하는 방법을 설명합니다. 살펴보겠습니다
Bazel 확장자는 .bzl
로 끝나는 파일입니다. 사용
load 문을 사용하여 확장 프로그램에서 기호를 가져옵니다.
고급 개념을 학습하기 전에 먼저 다음 사항을 확인하세요.
두 가지 언어에서 사용되는 Starlark 언어에 대해
BUILD
및.bzl
파일변수를 공유하는 방법 알아보기 두
BUILD
파일 간
매크로 및 규칙
매크로는 규칙을 인스턴스화하는 함수입니다. Kubernetes가
BUILD
파일이 너무 반복되거나 너무 복잡해지고 있습니다. 파일을 재사용할 수 있기 때문입니다.
생성합니다. 이 함수는 BUILD
파일을 읽는 즉시 평가됩니다. 후(After)
BUILD
파일의 평가 결과인 Bazel에는 매크로에 관한 정보가 거의 없습니다.
매크로가 genrule
를 생성하면 Bazel은
genrule
입니다. 따라서 bazel query
는 생성된 genrule
만 나열합니다.
규칙은 매크로보다 훨씬 강력합니다. Bazel에 액세스할 수 있습니다. 모든 일을 완벽하게 제어할 수 있습니다. 예를 들어 다른 규칙에 적용할 수 있습니다
간단한 로직을 재사용하려면 매크로로 시작하세요. 매크로가 규칙을 만드는 것이 좋습니다. 새로운 언어 지원 일반적으로 규칙을 사용하여 수행됩니다. 규칙은 고급 사용자용이며 대부분의 경우 사용자는 직접 작성할 필요가 없습니다. 기존 포드만 로드하고 있습니다.
평가 모델
빌드는 세 단계로 구성됩니다.
로드 단계. 먼저 모든 확장 프로그램과 모든
BUILD
를 로드하고 평가합니다. 고유한 파일을 제공합니다BUILD
파일의 실행은 간단히 규칙을 인스턴스화합니다 (규칙이 호출될 때마다 그래프에 추가됨). 여기에서 매크로가 평가됩니다.분석 단계. 규칙의
implementation
코드가 실행됩니다. 함수)를 사용하고 작업은 인스턴스화됩니다. 작업은 'hello.c에서 gcc를 실행하고 get hello.o')을 입력합니다. 다음 전에 생성될 파일을 명시적으로 나열해야 합니다. 가상 머신을 실행하는 것입니다 즉, 분석 단계에서는 로드 단계에서 생성된 그래프를 생성하고 액션 그래프를 생성합니다.실행 단계. 출력 중 하나 이상이 필요합니다. 파일이 누락되거나 명령이 하나의 출력을 생성하지 못하면 빌드가 실패합니다 테스트도 이 단계에서 실행됩니다.
Bazel은 동시 로드를 사용하여 .bzl
파일 및 BUILD
를 읽고 파싱하고 평가합니다.
할 수 있습니다. 파일은 빌드당 최대 한 번 읽히며 평가 결과는 다음과 같습니다.
캐시되고 재사용됩니다 파일은 모든 종속 항목 (load()
)에 한 번만 평가됩니다.
문)이 해결되었습니다. 의도적으로 .bzl
파일을 로드하면
값과 함수만 정의합니다.
Bazel은 종속 항목 분석을 사용하여 어떤 규칙을 분석해야 하는지, 어떤 작업을 실행해야 하는지 등을 정의합니다. 대상 예를 들어 규칙이 현재 빌드에 필요하지 않은 작업을 생성하는 경우 실행되지 않습니다
확장 프로그램 만들기
첫 번째 매크로를 생성하여 몇 가지 코드를 재사용해야 합니다. 그런 다음 매크로에 대해 자세히 알아보세요. '맞춤 동사'를 만드는 데 사용
규칙을 시작하려면 규칙 튜토리얼을 따르세요. 다음으로 규칙 개념에 대해 자세히 알아보세요.
아래의 두 링크는 자체 확장 프로그램을 작성할 때 매우 유용합니다. 유지 도달할 수 있습니다.
추가 정보
Buildifier 사용 지속적으로 코드를 포맷하고 린트를 유지해야 합니다.
.bzl
스타일 가이드를 따르세요.코드를 테스트합니다.
사용자에게 도움이 되는 문서를 생성합니다.
코드의 성능을 최적화합니다.
확장 프로그램을 다른 사용자에게 배포합니다.