이전 섹션에서는 패키지, 대상 및 라벨, 종속 항목 그래프를 추상적으로 빌드합니다. 이 섹션에서는 구체적인 문법을 설명합니다. 패키지를 정의하는 데 사용됩니다.
정의에 따라 모든 패키지에는 BUILD
파일이 포함됩니다.
있습니다.
BUILD
파일은 명령형 언어를 사용하여 평가됩니다.
Starlark
이는 문의 순차적 목록으로 해석됩니다.
일반적으로 순서는 중요합니다. 변수를 정의하기 전에
예로 들 수 있습니다 그러나 대부분의 BUILD
파일은
이러한 구문의 상대적 순서는 중요하지 않습니다. 모두
어떤 규칙이 어떤 값으로 선언되었는지
패키지 평가가 완료되는 시점입니다.
cc_library
와 같은 빌드 규칙 함수가 실행되면
새 타겟을 추가할 수 있습니다. 이 타겟은 나중에 라벨을 사용하여 참조될 수 있습니다.
간단한 BUILD
파일에서 규칙 선언은
변경할 수 있습니다.
코드와 데이터를 명확하게 구분하기 위해 BUILD
파일은
함수 정의, for
문 또는 if
문을 포함해야 합니다.
이해와 if
표현식이 허용됩니다. 함수는
.bzl
파일을 사용하세요. 또한 *args
및 **kwargs
인수는
BUILD
개 파일에서 허용됨 대신 모든 인수를 명시적으로 나열합니다.
결정적으로 Starlark의 프로그램은 임의의 I/O를 실행할 수 없습니다. 이 불변량은
알려진 시스템에만 의존하여 BUILD
파일의 해석을 밀폐합니다.
입력 집합으로 구성되며, 이는 빌드를 재현 가능한지 확인하는 데 필수적입니다.
자세한 내용은 Hermeticity를 참조하세요.
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_library
및 cc_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
규칙은 주어진 프로그래밍 언어라고 할 수 있습니다. 라이브러리는 다른 라이브러리에 종속될 수 있고 바이너리 및 테스트는 라이브러리에 종속될 수 있으며, 예상되는 별도의 컴파일 동작을 구현합니다.
<ph type="x-smartling-placeholder"></ph> 라벨 | <ph type="x-smartling-placeholder"></ph> 종속 항목 |