O Bazel aceita várias opções. Algumas opções variam com frequência (por exemplo,
--subcommands
), enquanto outros permanecem os mesmos em vários builds (como
--package_path
). Para evitar a especificação dessas opções inalteradas para cada build
(e outros comandos), você pode especificar opções em um arquivo de configuração, chamado
.bazelrc
Onde estão os arquivos .bazelrc
?
O Bazel procura arquivos de configuração opcionais nos seguintes locais:
na ordem mostrada abaixo. Como as opções são interpretadas nessa ordem,
opções em arquivos posteriores podem substituir um valor de um arquivo anterior se um
surge um conflito. Todas as opções que controlam quais desses arquivos são carregados são
de inicialização, o que significa que elas devem ocorrer após bazel
e
antes do comando (build
, test
etc).
O arquivo RC do sistema, a menos que
--nosystem_rc
esteja presente.Caminho:
- No Linux/macOS/Unixes:
/etc/bazel.bazelrc
- No Windows:
%ProgramData%\bazel.bazelrc
Não haverá erro se o arquivo não existir.
Se outro local especificado pelo sistema for necessário, será necessário criar um Binário do Bazel, substituindo o valor
BAZEL_SYSTEM_BAZELRC_PATH
em//src/main/cpp:option_processor
. O local especificado pelo sistema pode conter referências de variáveis de ambiente, como${VAR_NAME}
no Unix ou%VAR_NAME%
no Windows.- No Linux/macOS/Unixes:
O arquivo RC do espaço de trabalho, a menos que
--noworkspace_rc
esteja presente.Caminho:
.bazelrc
no diretório do seu espaço de trabalho (ao lado do nomeWORKSPACE
).Não haverá erro se o arquivo não existir.
O arquivo RC inicial, a menos que
--nohome_rc
esteja presente.Caminho:
- No Linux/macOS/Unixes:
$HOME/.bazelrc
- No Windows:
%USERPROFILE%\.bazelrc
, se existir, ou%HOME%/.bazelrc
Não haverá erro se o arquivo não existir.
- No Linux/macOS/Unixes:
O arquivo RC especificado pelo usuário, se definido com
--bazelrc=file
Essa sinalização é opcional, mas também pode ser especificada várias vezes.
/dev/null
indica que todos os outros--bazelrc
s serão ignorados, o que é útil para desativar a pesquisa de um arquivo rc do usuário, como em builds de lançamento.Exemplo:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
x.rc
ey.rc
são lidos.z.rc
é ignorado devido ao/dev/null
anterior.
Além desse arquivo de configuração opcional, o Bazel procura um rc global . Para mais detalhes, consulte a seção do bazelrc global.
Sintaxe e semântica de .bazelrc
Como todos os "rc" do UNIX .bazelrc
é um arquivo de texto com uma camada
gramática. Linhas vazias e linhas que começam com #
(comentários) são ignoradas. Cada
contém uma sequência de palavras, que são tokenizadas de acordo com a mesma
que o shell Bourne.
Importações
As linhas que começam com import
ou try-import
são especiais: use-as para carregar
outro "rc" . Para especificar um caminho relativo à raiz do espaço de trabalho,
gravar import %workspace%/path/to/bazelrc
.
A diferença entre import
e try-import
é que o Bazel falha se o
O arquivo com import
está ausente (ou não pode ser lido), mas não para um com try-import
.
.
Precedência de importação:
- As opções do arquivo importado têm precedência sobre as opções especificadas antes a instrução de importação.
- As opções especificadas após a instrução de importação têm precedência sobre opções no arquivo importado.
- As opções nos arquivos importados posteriormente têm precedência em relação aos arquivos importados anteriormente.
Padrões de opção
A maioria das linhas de um Bazel define valores de opção padrão. A primeira palavra em cada especifica quando esses padrões serão aplicados:
startup
: opções de inicialização, que vão antes do comando e são descritas embazel help startup_options
.common
: opções que precisam ser aplicadas a todos os comandos do Bazel compatíveis com para resolvê-los com rapidez. Se um comando não oferecer suporte a uma opção especificada dessa forma, o será ignorada, desde que seja válida para algum outro comando do Bazel. Observe que isso só se aplica a nomes de opções: se o comando atual aceitar uma opção com o nome especificado, mas não for compatível com o valor especificado, ela vai falhar.always
: opções que se aplicam a todos os comandos do Bazel. Se um comando não oferecer suporte a uma opção especificada dessa forma, ela falhará.command
: comando do Bazel, comobuild
ouquery
, em que as opções se aplicam. Essas opções também se aplicam a todos os comandos que herdam da classe o comando especificado. Por exemplo,test
herda debuild
.
Cada uma dessas linhas pode ser usada mais de uma vez, e os argumentos que seguem a
primeira palavra são combinadas como se tivessem aparecido em uma única linha. (Usuários da CVS,
outra ferramenta com um "canivete suíço" de linha de comando do Compute Engine,
semelhante à de .cvsrc
. Por exemplo, as linhas:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
são combinados como:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
de modo que as flags efetivas sejam --verbose_failures
e --test_tmpdir=/tmp/bar
.
Precedência da opção:
- As opções na linha de comando sempre têm precedência sobre as opções nos arquivos rc.
Por exemplo, se um arquivo rc indicar
build -c opt
, mas a sinalização da linha de comando for-c dbg
, a sinalização de linha de comando terá precedência. No arquivo rc, a precedência é regida pela especificidade: linhas para um um comando específico tem precedência sobre as linhas de um comando menos específico.
A especificidade é definida pela herança. Alguns comandos herdam opções de outros comandos, tornando o comando herdado mais específico que o comando kubectl. Por exemplo,
test
herda do comandobuild
, portanto, todas as sinalizaçõesbazel build
são válidas parabazel test
e todas as linhasbuild
também se aplicam abazel test
, a menos que haja uma linhatest
para a mesma opção. Se a rc diz:test -c dbg --test_env=PATH
build -c opt --verbose_failures
então
bazel build //foo
vai usar-c opt --verbose_failures
ebazel test //foo
vai usar--verbose_failures -c dbg --test_env=PATH
.O gráfico de herança (especificidade) é:
- Cada comando é herdado de
common
- Os comandos a seguir herdam de (e são mais específicos que)
build
:test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
eaquery
coverage
herda detest
- Cada comando é herdado de
Duas linhas que especificam opções para o mesmo comando com a mesma especificidade são analisados na ordem em que aparecem no arquivo.
Como essa regra de precedência não corresponde à ordem do arquivo, legibilidade se você seguir a ordem de precedência nos arquivos rc: comece com
common
na parte superior e terminará com os comandos mais específicos no parte inferior do arquivo. Dessa forma, a ordem em que as opções são lidas é a iguais à ordem em que são aplicados, o que é mais intuitivo.
Os argumentos especificados em uma linha de um arquivo rc podem incluir argumentos que são e não opções, como nomes de destinos de build etc. Estes, como o opções especificadas nos mesmos arquivos, têm precedência menor que seus irmãos na linha de comando e sempre precedem a lista explícita de objetos argumentos de opção.
--config
Além de definir padrões de opções, o arquivo rc pode ser usado para agrupar opções
e fornecem uma abreviação para agrupamentos comuns. Para isso, adicione um :name
ao comando. Essas opções são ignoradas por padrão,
incluído quando a opção --config=name
está presente,
seja na linha de comando ou em um arquivo .bazelrc
, recursivamente, mesmo dentro de
outra definição de configuração. As opções especificadas por command:name
serão
expandida para os comandos aplicáveis, na ordem de precedência descrita acima.
--config=foo
expande para as opções definidas na
os arquivos rc "no local" para que as opções
especificados para a configuração têm a mesma precedência que a opção --config=foo
tinha.
Essa sintaxe não se estende ao uso de startup
para definir
opções de inicialização. Ambiente
startup:config-name --some_startup_option
no arquivo .bazelrc será ignorado.
Exemplo
Confira este exemplo do arquivo ~/.bazelrc
:
# Bob's Bazel option defaults
startup --host_jvm_args=-XX:-UseParallelGC
import /home/bobs_project/bazelrc
build --show_timestamps --keep_going --jobs 600
build --color=yes
query --keep_going
# Definition of --config=memcheck
build:memcheck --strip=never --test_timeout=3600
Outros arquivos que regem o comportamento do Bazel
.bazelignore
É possível especificar diretórios no espaço de trabalho
que você quer que o Bazel ignore, como projetos relacionados
que usam outros sistemas de build. Coloque um arquivo chamado
.bazelignore
na raiz do espaço de trabalho
e adicione os diretórios que você quer que o Bazel ignore, um por
linha As entradas são relativas à raiz do espaço de trabalho.
Arquivo global do Bazel
O Bazel lê os arquivos bazelrc opcionais nesta ordem:
- Arquivo rc-file do sistema localizado em etc/bazel.bazelrc
.
- Arquivo rc do espaço de trabalho localizado em $workspace/tools/bazel.rc
.
- Arquivo rc-home localizado em $HOME/.bazelrc
Cada arquivo Bazelrc listado aqui tem uma sinalização correspondente que pode ser usada para desativá-los (por exemplo, --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). Também é possível fazer o Bazel ignorar todos os bazelrcs passando a opção de inicialização --ignore_all_rc_files
.