Esta página aborda as práticas recomendadas para usar o Bazel no Windows. Para instruções de instalação, consulte Instalar o Bazel no Windows.
Problemas conhecidos
Os problemas do Bazel relacionados ao Windows são marcados com o rótulo "team-Windows" no GitHub. Confira os problemas em aberto aqui.
Práticas recomendadas
Evitar problemas de caminhos longos
Algumas ferramentas têm a Limitação de comprimento máximo do caminho no Windows, incluindo o compilador MSVC. Para evitar esse problema, especifique um diretório de saída curto para o Bazel usando a flag --output_user_root.
Por exemplo, adicione a seguinte linha ao arquivo bazelrc:
startup --output_user_root=C:/tmp
Ativar o suporte a nomes de arquivo 8.3
O Bazel tenta criar uma versão de nome curto para caminhos de arquivo longos. Mas, para isso, é necessário ativar o suporte a nomes de arquivo 8.3 no volume em que o arquivo com o caminho longo está localizado. Para ativar a criação de nomes 8.3 em todos os volumes, execute o seguinte comando:
fsutil 8dot3name set 0
Ativar suporte a symlink
Alguns recursos exigem que o Bazel crie symlinks de arquivos no Windows, ativando o Modo de desenvolvedor (no Windows 10 versão 1703 ou mais recente) ou executando o Bazel como administrador. Isso ativa os seguintes recursos:
Para facilitar, adicione as seguintes linhas ao arquivo bazelrc:
startup --windows_enable_symlinks
build --enable_runfiles
Observação: criar links simbólicos no Windows é uma operação cara. A flag --enable_runfiles
pode criar uma grande quantidade de symlinks de arquivos. Ative esse recurso apenas quando necessário.
Execução do Bazel: shell MSYS2 x prompt de comando x PowerShell
Recomendação:execute o Bazel no prompt de comando (cmd.exe
) ou no
PowerShell.
Desde 15/01/2020, não execute o Bazel em bash
, seja no shell MSYS2, no Git Bash, no Cygwin ou em qualquer outra variante do Bash. Embora o Bazel funcione na maioria dos casos de uso, algumas coisas não funcionam, como interromper o build com Ctrl+C no MSYS2.
Além disso, se você optar por executar no MSYS2, desative a conversão automática de caminhos do MSYS2. Caso contrário, o MSYS vai converter argumentos de linha de comando que parecem caminhos do Unix (como //foo:bar
) em caminhos do Windows. Confira esta resposta do StackOverflow para mais detalhes.
Como usar o Bazel sem Bash (MSYS2)
Como usar o bazel build sem o Bash
As versões do Bazel anteriores à 1.0 exigiam o Bash para criar algumas regras.
A partir do Bazel 1.0, é possível criar qualquer regra sem Bash, a menos que ela seja:
genrule
, porque as genrules executam comandos Bashsh_binary
oush_test
, porque eles precisam do Bash- Regra Starlark que usa
ctx.actions.run_shell()
ouctx.resolve_command()
No entanto, o genrule
é usado com frequência para tarefas simples, como
copiar um arquivo
ou gravar um arquivo de texto.
Em vez de usar genrule
(e dependendo do Bash), você pode encontrar uma regra adequada no repositório bazel-skylib.
Quando criadas no Windows, essas regras não exigem Bash.
Como usar o teste do Bazel sem Bash
As versões do Bazel anteriores à 1.0 exigiam o Bash para bazel test
qualquer coisa.
A partir do Bazel 1.0, é possível testar qualquer regra sem Bash, exceto quando:
- você usar
--run_under
; - a própria regra de teste requer Bash, porque o executável dela é um script de shell.
Como usar "bazel run" sem Bash
As versões do Bazel anteriores à 1.0 exigiam o Bash para bazel run
qualquer coisa.
A partir do Bazel 1.0, é possível executar qualquer regra sem Bash, exceto quando:
- você usa
--run_under
ou--script_path
; - a própria regra de teste requer Bash, porque o executável dela é um script de shell.
Usando regras shbinary e sh*, e ctx.actions.run_shell() sem Bash
Você precisa do Bash para criar e testar regras do sh_*
e do Starlark
que usam ctx.actions.run_shell()
e ctx.resolve_command()
. Isso se aplica não apenas às regras no seu projeto, mas também às regras em qualquer um dos repositórios externos de que seu projeto depende (mesmo transitivamente).
No futuro, talvez haja uma opção de usar o Subsistema Windows para Linux (WSL) para criar essas regras, mas no momento isso não é uma prioridade para a subequipe do Bazel no Windows.
Como definir variáveis de ambiente
As variáveis de ambiente definidas no prompt de comando do Windows (cmd.exe
) são definidas apenas nessa sessão. Se você iniciar um novo cmd.exe
, será necessário
definir as variáveis novamente. Para sempre definir as variáveis quando cmd.exe
é iniciado, adicione-as às variáveis do usuário ou do sistema na caixa de diálogo Control Panel >
System Properties > Advanced > Environment Variables...
.
Criar no Windows
Criar C++ com MSVC
Para criar destinos em C++ com o MSVC, você precisa:
(Opcional) As variáveis de ambiente
BAZEL_VC
eBAZEL_VC_FULL_VERSION
.O Bazel detecta automaticamente o compilador Visual C++ no seu sistema. Para informar ao Bazel que use uma instalação específica do VC, defina as seguintes variáveis de ambiente:
Para o Visual Studio 2017 e 2019, defina um dos
BAZEL_VC
. Além disso, você também pode definirBAZEL_VC_FULL_VERSION
.BAZEL_VC
o diretório de instalação das Ferramentas de Build do Visual C++set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC
BAZEL_VC_FULL_VERSION
(opcional) Somente para Visual Studio 2017 e 2019, o número da versão completa das ferramentas de build do Visual C++. Você pode escolher a versão exata das Ferramentas de Build do Visual C++ usandoBAZEL_VC_FULL_VERSION
se mais de uma versão estiver instalada. Caso contrário, o Bazel vai escolher a versão mais recente.set BAZEL_VC_FULL_VERSION=14.16.27023
Para o Visual Studio 2015 ou mais antigo, defina
BAZEL_VC
. (BAZEL_VC_FULL_VERSION
não é compatível.)BAZEL_VC
o diretório de instalação das Ferramentas de Build do Visual C++set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
-
O SDK do Windows contém arquivos de cabeçalho e bibliotecas necessários para criar aplicativos Windows, incluindo o próprio Bazel. Por padrão, o SDK do Windows mais recente instalado será usado. Você também pode especificar a versão do SDK do Windows definindo
BAZEL_WINSDK_FULL_VERSION
. Você pode usar um número completo do SDK do Windows 10, como 10.0.10240.0, ou especificar 8.1 para usar o SDK do Windows 8.1 (apenas uma versão do SDK do Windows 8.1 está disponível). Verifique se você tem o SDK do Windows especificado instalado.Requisito: isso é compatível com VC 2017 e 2019. As ferramentas de build autônomas do VC 2015 não permitem selecionar o SDK do Windows. É necessário ter a instalação completa do Visual Studio 2015. Caso contrário, o
BAZEL_WINSDK_FULL_VERSION
será ignorado.set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
Se tudo estiver configurado, você poderá criar um destino em C++ agora.
Tente criar uma meta usando um dos nossos projetos de exemplo:
bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe
Por padrão, os binários criados têm como destino a arquitetura x64. Para especificar uma arquitetura de destino diferente, defina a opção de build --cpu
para sua arquitetura de destino:
* x64 (padrão): --cpu=x64_windows
ou nenhuma opção
* x86: --cpu=x64_x86_windows
* ARM: --cpu=x64_arm_windows
* ARM64: --cpu=arm64_windows
Por exemplo, para criar destinos para a arquitetura ARM, execute:
bazel build //examples/cpp:hello-world --cpu=x64_arm_windows
Para criar e usar bibliotecas de vínculo dinâmico (arquivos DLL), consulte este exemplo.
Limite de comprimento da linha de comando: para evitar o problema de limite de comprimento da linha de comando do Windows, ative o recurso de arquivo de parâmetro do compilador usando --features=compiler_param_file
.
Criar C++ com Clang
A partir da versão 0.29.0, o Bazel é compatível com a criação usando o driver de compilador compatível com MSVC do LLVM (clang-cl.exe
).
O Bazel pode detectar automaticamente a instalação do LLVM no seu sistema, ou você pode informar explicitamente ao Bazel onde o LLVM está instalado usando BAZEL_LLVM
.
BAZEL_LLVM
o diretório de instalação do LLVMset BAZEL_LLVM=C:\Program Files\LLVM
Há várias situações para ativar a cadeia de ferramentas Clang para criar C++.
No bazel 0.28 e versões anteriores, o Clang não é compatível.
Sem
--incompatible_enable_cc_toolchain_resolution
: é possível ativar a cadeia de ferramentas do Clang com uma flag de build--compiler=clang-cl
.Com
--incompatible_enable_cc_toolchain_resolution
: Você precisa adicionar uma plataforma de destino ao seuBUILD file
(por exemplo, o arquivoBUILD
de nível superior):platform( name = "x64_windows-clang-cl", constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", "@bazel_tools//tools/cpp:clang-cl", ], )
Em seguida, ative a cadeia de ferramentas do Clang de uma das duas maneiras a seguir:
- Especifique as seguintes flags de build:
--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl --extra_execution_platforms=//:x64_windows-clang-cl
- Registre a plataforma e o conjunto de ferramentas no arquivo
WORKSPACE
:
register_execution_platforms( ":x64_windows-clang-cl" ) register_toolchains( "@local_config_cc//:cc-toolchain-x64_windows-clang-cl", )
A flag --incompatible_enable_cc_toolchain_resolution será ativada por padrão em uma versão futura do Bazel. Portanto, é recomendável ativar a compatibilidade com Clang usando a segunda abordagem.
Criar Java
Para criar destinos Java, você precisa de:
No Windows, o Bazel cria dois arquivos de saída para regras java_binary
:
- um arquivo
.jar
- um arquivo
.exe
que pode configurar o ambiente para a JVM e executar o binário
Tente criar uma meta usando um dos nossos projetos de exemplo:
bazel build //examples/java-native/src/main/java/com/example/myproject:hello-world
bazel-bin\examples\java-native\src\main\java\com\example\myproject\hello-world.exe
Criar Python
Para criar destinos em Python, você precisa de:
No Windows, o Bazel cria dois arquivos de saída para regras py_binary
:
- um arquivo ZIP autoextraível
- um arquivo executável que pode iniciar o interpretador Python com o arquivo zip autoextraível como argumento
Você pode executar o arquivo executável (ele tem uma extensão .exe
) ou o Python com o arquivo ZIP autoextraível como argumento.
Tente criar uma meta usando um dos nossos projetos de exemplo:
bazel build //examples/py_native:bin
bazel-bin\examples\py_native\bin.exe
python bazel-bin\examples\py_native\bin.zip
Se quiser saber como o Bazel cria destinos Python no Windows, confira este documento de design.