광고 확장 개요

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
문제 신고 소스 보기

이 페이지에서는 매크로 및 규칙을 사용하여 BUILD 언어를 확장하는 방법을 설명합니다.

Bazel 확장 프로그램은 .bzl으로 끝나는 파일입니다. load 문을 사용하여 확장 프로그램에서 기호를 가져옵니다.

고급 개념을 배우기 전에 먼저 다음을 수행하세요.

  • BUILD.bzl 파일 모두에 사용되는 Starlark 언어에 대해 읽어보세요.

  • BUILD 파일 간에 변수를 공유하는 방법을 알아보세요.

매크로 및 규칙

매크로는 규칙을 인스턴스화하는 함수입니다. BUILD 파일이 너무 반복적이거나 너무 복잡할 때 유용합니다. 일부 코드를 재사용할 수 있기 때문입니다. 함수는 BUILD 파일을 읽는 즉시 평가됩니다. BUILD 파일을 평가한 후에는 Bazel에 매크로에 대한 정보가 거의 없습니다. 매크로가 genrule를 생성하면 Bazel은 개발자가 genrule를 작성한 것처럼 작동합니다. 따라서 bazel query는 생성된 genrule만 나열합니다.

규칙은 매크로보다 더 효과적입니다. Bazel 내부에 액세스할 수 있고 현재 상황을 완전히 제어할 수 있습니다. 예를 들어 다른 규칙에 정보를 전달할 수 있습니다.

간단한 로직을 재사용하려면 매크로로 시작하세요. 매크로가 복잡해지면 규칙으로 만드는 것이 좋습니다. 새 언어 지원은 일반적으로 규칙을 통해 이루어집니다. 규칙은 고급 사용자를 위한 것이며 대부분의 사용자는 규칙을 작성할 필요가 없습니다. 기존 규칙만 로드하고 호출합니다.

평가 모델

빌드는 세 단계로 구성됩니다.

  • 로드 단계. 먼저 빌드에 필요한 모든 확장 프로그램과 모든 BUILD 파일을 로드하고 평가합니다. BUILD 파일을 실행하면 규칙이 인스턴스화됩니다 (규칙이 호출될 때마다 그래프에 추가됨). 여기에서 매크로가 평가됩니다.

  • 분석 단계. 규칙 코드가 실행되고 (implementation 함수) 작업이 인스턴스화됩니다. 작업은 'hello.c에서 gcc 실행 및 hello.o 가져오기'와 같은 입력 집합에서 출력 집합을 생성하는 방법을 설명합니다. 실제 명령어를 실행하기 전에 생성될 파일을 명시적으로 나열해야 합니다. 즉, 분석 단계에서는 로드 단계에서 생성된 그래프를 취하여 작업 그래프를 생성합니다.

  • 실행 단계. 하나 이상의 출력이 필요한 경우 작업이 실행됩니다. 파일이 누락되거나 명령어가 출력을 하나도 생성하지 못하면 빌드가 실패합니다. 이 단계에서도 테스트가 실행됩니다.

Bazel은 parallelism을 사용하여 .bzl 파일과 BUILD 파일을 읽고, 파싱하고, 평가합니다. 파일은 빌드당 최대 한 번 판독되며 평가 결과는 캐시 및 재사용됩니다. 모든 종속 항목 (load() 문)이 확인된 후에만 파일이 평가됩니다. 설계상 .bzl 파일을 로드하는 것은 눈에 띄는 부작용이 없으며 값과 함수만 정의합니다.

Bazel은 영리하게 시도하며 종속 항목 분석을 사용하여 로드해야 하는 파일, 분석해야 하는 규칙, 실행해야 하는 작업을 인식합니다. 예를 들어 규칙에서 현재 빌드에 필요 없는 작업을 생성한다면 작업이 실행되지 않습니다.

광고 확장 만들기

아래의 두 링크는 광고 확장을 직접 작성할 때 매우 유용합니다. 사용자가 접근할 수 있는 거리 유지

추가 정보

매크로규칙 외에도 관점저장소 규칙을 작성하는 것이 좋습니다.