Perguntas frequentes

Informar um problema Mostrar fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Estes são alguns problemas comuns e perguntas sobre a criação de extensões.

Por que meu arquivo não é produzido / minha ação nunca é executada?

Ele só executa as ações necessárias para produzir os arquivos de saída solicitados.

  • Se o arquivo que você quer tiver um marcador, é possível solicitá-lo diretamente: bazel build //pkg:myfile.txt

  • Se o arquivo estiver em um grupo de saída do destino, talvez seja necessário especificar que o grupo de saída na linha de comando: bazel build //pkg:mytarget --output_groups=foo

  • Se você quiser que o arquivo seja criado automaticamente sempre que seu destino for mencionada na linha de comando, adicione-a às saídas padrão da sua regra retornando um provedor DefaultInfo.

Consulte a página Regras para mais informações.

Por que minha função de implementação não é executada?

Ele analisa apenas os destinos solicitados para a compilação. Você deve nomeie o destino na linha de comando ou algo que dependa do alvo.

Falta um arquivo quando minha ação ou binário é executado

Verifique se 1) o arquivo foi registrado como uma entrada para a ação ou e 2) o script ou a ferramenta em execução está acessando o arquivo usando o caminho correto.

Para ações, declare entradas transmitindo-as para a função ctx.actions.* que cria a ação. O caminho correto para o arquivo pode ser obtido usando File.path

Para binários, as saídas executáveis executadas por um bazel run ou bazel test ), você declara as entradas incluindo-as no runfiles. Em vez de usar o campo path, use File.short_path, que é o caminho do arquivo relativo a o diretório de arquivos de execução em que o binário é executado.

Como posso controlar quais arquivos são criados pelo bazel build //pkg:mytarget?

Use o provedor DefaultInfo para defina as saídas padrão.

Como posso executar um programa ou enviar E/S como parte do build?

Uma ferramenta pode ser declarada como um destino, assim como qualquer outra parte do seu build. executar durante a fase de execução para ajudar a criar outros destinos. Para criar uma ação que executa uma ferramenta, use ctx.actions.run e transmita ferramenta como o parâmetro executable.

Durante as fases de carregamento e análise, uma ferramenta não pode ser executada, nem você pode realizar E/S de arquivos. Isso significa que as ferramentas e o conteúdo dos arquivos (exceto o conteúdo e .bzl) não podem afetar a forma como os gráficos de destino e de ação são criados.

E se eu precisar acessar os mesmos dados estruturados antes e durante a fase de execução?

Você pode formatar os dados estruturados como um arquivo .bzl. É possível load() o arquivo para acessá-los durante as fases de carregamento e análise. Você pode passá-los como uma entrada ou runfile a ações e executáveis que precisam dele durante a fase de execução.

Como devo documentar o código Starlark?

Para regras e atributos de regras, você pode passar um literal docstring (possivelmente aspas triplas) ao parâmetro doc de rule ou attr.*(). Para assistente e macros, use um literal de docstring entre aspas triplas seguindo o formato dados aqui. As funções de implementação de regras geralmente não precisam de um docstring próprio.

O uso de literais de string nos locais esperados facilita o trabalho para extrair documentações. Fique à vontade para usar comentários padrão sem strings onde quer que possa ajudar o leitor do código.