자주 묻는 질문(FAQ)

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

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

Bazel은 요청된 출력 파일을 생성하는 데 필요한 작업만 실행합니다.

  • 원하는 파일에 라벨이 있으면 다음과 같이 직접 요청할 수 있습니다. bazel build //pkg:myfile.txt

  • 파일이 대상의 출력 그룹에 있으면 명령줄에서 해당 출력 그룹을 지정해야 할 수도 있습니다. bazel build //pkg:mytarget --output_groups=foo

  • 명령줄에서 대상이 언급될 때마다 파일이 자동으로 빌드되도록 하려면 DefaultInfo 제공자를 반환하여 규칙의 기본 출력에 추가합니다.

자세한 내용은 규칙 페이지를 참조하세요.

구현 함수가 실행되지 않는 이유는 무엇인가요?

Bazel은 빌드에 요청된 대상만 분석합니다. 명령줄에서 대상의 이름을 지정하거나 대상에 종속된 이름을 지정해야 합니다.

내 작업 또는 바이너리가 실행될 때 파일이 누락됨

1) 파일이 작업 또는 바이너리에 대한 입력으로 등록되었는지, 2) 실행 중인 스크립트 또는 도구가 올바른 경로를 사용하여 파일에 액세스하고 있는지 확인합니다.

작업의 경우 작업을 생성하는 ctx.actions.* 함수에 입력을 전달하여 선언합니다. 올바른 파일 경로는 File.path를 사용하여 얻을 수 있습니다.

바이너리 (bazel run 또는 bazel test 명령어로 실행되는 실행 가능한 출력)의 경우 입력을 실행 파일에 포함하여 선언합니다. 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이 필요하지 않습니다.

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