다음은 확장 프로그램 작성과 관련된 일반적인 문제와 질문입니다.
파일이 생성되지 않거나 작업이 실행되지 않는 이유는 무엇인가요?
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
명령어로 실행되는 실행 파일 출력)의 경우 runfiles에 포함하여 입력을 선언합니다. path
필드 대신 바이너리가 실행되는 runfiles 디렉터리에 대한 파일 경로인 File.short_path
를 사용하세요.
bazel build //pkg:mytarget
에서 빌드하는 파일을 제어하려면 어떻게 해야 하나요?
DefaultInfo
제공자를 사용하여 기본 출력을 설정합니다.
빌드의 일부로 프로그램을 실행하거나 파일 I/O를 실행하려면 어떻게 해야 하나요?
도구는 빌드의 다른 부분과 마찬가지로 타겟으로 선언할 수 있으며 실행 단계에서 실행되어 다른 타겟을 빌드하는 데 도움이 됩니다. 도구를 실행하는 작업을 만들려면 ctx.actions.run
를 사용하고 도구를 executable
매개변수로 전달합니다.
로드 및 분석 단계에서는 도구를 실행할 수 없으며 파일 I/O를 실행할 수도 없습니다. 즉, 도구와 파일 콘텐츠 (BUILD 및 .bzl 파일의 콘텐츠 제외)는 타겟 및 작업 그래프가 생성되는 방식에 영향을 줄 수 없습니다.
실행 단계 전후에 동일한 구조화된 데이터에 액세스해야 하는 경우 어떻게 해야 하나요?
구조화된 데이터를 .bzl 파일로 포맷할 수 있습니다. 로드 및 분석 단계에서 파일에 액세스하려면 파일을 load()
하면 됩니다. 실행 단계에서 필요한 작업과 실행 파일에 입력 또는 runfile로 전달할 수 있습니다.
Starlark 코드를 문서화하려면 어떻게 해야 하나요?
규칙 및 규칙 속성의 경우 3중 따옴표로 묶일 수 있는 docstring 리터럴을 rule
또는 attr.*()
의 doc
매개변수에 전달할 수 있습니다. 도우미 함수와 매크로의 경우 여기에 제공된 형식을 따르는 삼중 따옴표로 묶인 독스트링 리터럴을 사용하세요.
규칙 구현 함수에는 일반적으로 자체 독스트링이 필요하지 않습니다.
예상되는 위치에 문자열 리터럴을 사용하면 자동화된 도구에서 문서를 더 쉽게 추출할 수 있습니다. 코드 리더에게 도움이 되는 곳이라면 어디든지 표준 비문자열 주석을 자유롭게 사용하세요.