다음은 확장 프로그램 작성과 관련된 몇 가지 일반적인 문제와 질문입니다.
파일이 생성되지 않거나 작업이 실행되지 않는 이유는 무엇인가요?
Bazel은 requested 출력 파일을 생성하는 데 필요한 작업만 실행합니다.
원하는 파일에 라벨이 있는 경우 다음과 같이 직접 요청할 수 있습니다.
bazel build //pkg:myfile.txt
파일이 대상의 출력 그룹에 있는 경우 출력 그룹을 만듭니다.
bazel build //pkg:mytarget --output_groups=foo
타겟이 를 사용하여 규칙의 기본 출력에 이를 추가하여
DefaultInfo
제공자를 반환합니다.
자세한 내용은 규칙 페이지를 참고하세요.
구현 함수가 실행되지 않는 이유는 무엇인가요?
Bazel은 빌드에 요청된 대상만 분석합니다. 해야 할 일 명령줄에서 타겟의 이름을 지정하거나 있습니다.
작업 또는 바이너리를 실행할 때 파일이 누락됨
1) 파일이 작업에 대한 입력으로 등록되어 있는지 확인합니다. 2) 실행 중인 스크립트 또는 도구가 찾을 수 있습니다.
작업의 경우 입력을 ctx.actions.*
함수에 전달하여 선언합니다.
확인할 수 있습니다. 파일의 올바른 경로는
File.path
바이너리의 경우 (실행 가능한 출력은 bazel run
또는 bazel test
에서 실행됨)
명령어인 경우)를 사용하려면 입력을
runfiles을 사용합니다. path
필드를 사용하는 대신
File.short_path
-
실행 파일 디렉토리에 저장됩니다
bazel build //pkg:mytarget
에서 빌드할 파일을 제어하려면 어떻게 해야 하나요?
DefaultInfo
제공업체를 사용하여 다음 작업을 할 수 있습니다.
기본 출력을 설정합니다.
빌드 중에 프로그램을 실행하거나 파일 I/O를 수행하려면 어떻게 해야 하나요?
도구는 빌드의 다른 부분과 마찬가지로 대상으로 선언할 수 있습니다.
다른 대상 빌드를 돕기 위해 실행 단계 중에 실행됩니다. 작업 만들기
ctx.actions.run
를 사용하여
도구를 executable
매개변수로 사용합니다.
로드 및 분석 단계에서는 도구를 실행할 수 없으며 파일 I/O입니다. 즉, BUILD의 콘텐츠를 제외한 도구와 파일 콘텐츠만 및 .bzl 파일)은 대상 및 작업 그래프가 생성되는 방식에 영향을 줄 수 없습니다.
실행 단계 전과 도중에 동일한 구조화된 데이터에 액세스해야 하는 경우에는 어떻게 해야 하나요?
구조화된 데이터를 .bzl 파일로 형식을 지정할 수 있습니다. 파일을 load()
하여 다음을 실행할 수 있습니다.
로드 및 분석 단계에서 액세스할 수 있습니다 입력으로 전달하거나
실행 단계 중에 이 파일이 필요한 작업과 실행 파일에 실행할 수 있습니다.
Starlark 코드를 문서화하려면 어떻게 해야 하나요?
규칙 및 규칙 속성의 경우
삼중따옴표로 묶음)을 rule
또는 attr.*()
의 doc
매개변수로 전달할 수 있습니다. 도우미용
함수와 매크로를 사용하려면
여기를 참고하세요.
규칙 구현 함수에는 일반적으로 자체 docstring이 필요하지 않습니다.
예상된 위치에 문자열 리터럴을 사용하면 자동화하기가 더 쉬워집니다. 도구를 사용하여 문서를 추출하는 방법을 알아봤습니다 문자열이 아닌 표준 댓글을 자유롭게 사용하세요. 코드 읽기에 도움이 될 수 있습니다