자주 묻는 질문(FAQ)

문제 신고하기 소스 보기

다음은 확장 프로그램 작성과 관련된 몇 가지 일반적인 문제와 질문입니다.

파일이 생성되지 않거나 작업이 실행되지 않는 이유는 무엇인가요?

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 코드를 문서화하려면 어떻게 해야 하나요?

규칙 및 규칙 속성의 경우 docstring 리터럴 (삼중 따옴표로 묶을 수 있음)을 rule 또는 attr.*()doc 매개변수에 전달할 수 있습니다. 도우미 함수와 매크로의 경우 여기에 지정된 형식에 따라 삼중따옴표 붙은 docstring 리터럴을 사용합니다. 규칙 구현 함수에는 일반적으로 자체 docstring이 필요하지 않습니다.

예상된 위치에 문자열 리터럴을 사용하면 자동화된 도구에서 문서를 더 쉽게 추출할 수 있습니다. 코드 리더에 도움이 될 수 있는 경우에는 문자열이 아닌 표준 주석을 자유롭게 사용할 수 있습니다.