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 abertos aqui.
Práticas recomendadas
Evitar problemas de caminho longo
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 pela flag --output_user_root.
Por exemplo, adicione a seguinte linha ao arquivo bazelrc:
startup --output_user_root=C:/tmpAtivar o suporte a nomes de arquivos 8.3
O Bazel tenta criar uma versão de nome curto para caminhos de arquivos longos. No entanto, para fazer isso, o suporte a nomes de arquivos 8.3 precisa ser ativado para o volume em que o arquivo com o caminho longo reside. É possível ativar a criação de nomes 8.3 em todos os volumes executando o seguinte comando:
fsutil 8dot3name set 0Ativar o suporte a links simbólicos
Alguns recursos exigem que o Bazel possa criar links simbólicos 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_symlinksbuild --enable_runfiles
Observação: a criação de links simbólicos no Windows é uma operação cara. A flag --enable_runfiles pode criar uma grande quantidade de links simbólicos de arquivos. Ative esse recurso apenas quando necessário.
Execução do Bazel: shell do MSYS2 x prompt de comando x PowerShell
Recomendação: execute o Bazel no prompt de comando (cmd.exe) ou no
PowerShell.
A partir de 15/01/2020, não execute o Bazel no bash, seja
no shell do MSYS2, no Git Bash, no Cygwin ou em qualquer outra variante do Bash. Embora o Bazel
possa funcionar na maioria dos casos de uso, algumas coisas estão quebradas, como
interromper o build com Ctrl+C no MSYS2).
Além disso, se você optar por executar no MSYS2, será necessário desativar a conversão automática de caminho 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. Consulte
esta resposta do StackOverflow
para mais detalhes.
Como usar o Bazel sem o Bash (MSYS2)
Como usar o build do Bazel 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 o Bash, a menos que seja uma:
genrule, porque as genrules executam comandos do Bash- regra
sh_binaryoush_test, porque elas precisam do Bash - regra Starlark que usa
ctx.actions.run_shell()ouctx.resolve_command()
No entanto, genrule é usado com frequência para tarefas simples, como
copiar um arquivo
ou gravar um arquivo de texto.
Em vez de usar genrule (e depender do Bash), você pode encontrar uma regra adequada
no
repositório bazel-skylib.
Quando criadas no Windows, essas regras não exigem o Bash.
Como usar o teste do Bazel sem o 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 o Bash, exceto quando:
- você usa
--run_under - a regra de teste exige o Bash (porque o executável é um script de shell)
Como usar a execução do Bazel sem o 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 o Bash, exceto quando:
- você usa
--run_underou--script_path - a regra de teste exige o Bash (porque o executável é um script de shell)
Como usar regras shbinary e sh* e ctx.actions.run_shell() sem o Bash
Você precisa do Bash para criar e testar regras sh_* e para criar e testar regras Starlark
que usam ctx.actions.run_shell() e ctx.resolve_command(). Isso
se aplica não apenas às regras do seu projeto, mas também às regras em qualquer um dos repositórios externos
de que seu projeto depende (mesmo transitivamente).
No futuro, pode haver uma opção para usar o Subsistema Windows para Linux (WSL, na sigla em inglês) para criar essas regras, mas no momento 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ó são
definidas nessa sessão do prompt de comando. Se você iniciar um novo cmd.exe, será necessário
definir as variáveis novamente. Para sempre definir as variáveis quando cmd.exe for iniciado, você
pode adicioná-las às variáveis de usuário ou de sistema na caixa de diálogo Control Panel >
System Properties > Advanced > Environment Variables....
Criar no Windows
Criar C++ com o MSVC
Para criar destinos C++ com o MSVC, você precisa de:
(Opcional) A variável de ambiente
BAZEL_VCeBAZEL_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 de
BAZEL_VC. Além disso, você também pode definirBAZEL_VC_FULL_VERSION.BAZEL_VCo diretório de instalação das ferramentas de build do Visual C++set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VCBAZEL_VC_FULL_VERSION(opcional) Somente para o Visual Studio 2017 e 2019, o número da versão completa das ferramentas de build do Visual C++. É possível escolher a versão exata das ferramentas de build do Visual C++ usandoBAZEL_VC_FULL_VERSIONse 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_VERSIONnão é compatível.)BAZEL_VCo 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 Windows SDK.
O SDK do Windows contém arquivos de cabeçalho e bibliotecas necessários ao criar aplicativos do Windows, incluindo o próprio Bazel. Por padrão, o SDK do Windows mais recente instalado será usado. Também é possível especificar a versão do SDK do Windows definindo
BAZEL_WINSDK_FULL_VERSION. É possível 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 o VC 2017 e 2019. As ferramentas de build do VC 2015 independentes não oferecem suporte à seleção do SDK do Windows. Você precisará da instalação completa do Visual Studio 2015. Caso contrário,
BAZEL_WINSDK_FULL_VERSIONserá ignorado.set BAZEL_WINSDK_FULL_VERSION=10.0.10240.0
Se tudo estiver configurado, você poderá criar um destino C++ agora.
Tente criar um destino em um dos nossos projetos de exemplo :
bazel build //examples/cpp:hello-worldbazel-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 a 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 o Clang
A partir da versão 0.29.0, o Bazel oferece suporte à criação com 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 por BAZEL_LLVM.
BAZEL_LLVMo diretório de instalação do LLVMset BAZEL_LLVM=C:\Program Files\LLVM
Para ativar a cadeia de ferramentas do Clang para criar C++, há várias situações.
No Bazel 0.28 e versões mais antigas: o Clang não é compatível.
Sem
--incompatible_enable_cc_toolchain_resolution: é possível ativar a cadeia de ferramentas do Clang por uma flag de build--compiler=clang-cl.Com
--incompatible_enable_cc_toolchain_resolution: É necessário adicionar um destino de plataforma aoBUILD file(por exemplo, o arquivoBUILDde 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, é possível ativar 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 a cadeia de ferramentas no arquivo
MODULE.bazel:
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 na versão futura do Bazel. Portanto, é recomendável ativar o suporte ao Clang com a segunda abordagem.
Criar Java
Para criar destinos Java, você precisa de:
No Windows, o Bazel cria dois arquivos de saída para java_binary regras:
- um arquivo
.jar - um arquivo
.exeque pode configurar o ambiente para a JVM e executar o binário
Tente criar um destino em um dos nossos projetos de exemplo :
bazel build //examples/java-native/src/main/java/com/example/myproject:hello-worldbazel-bin\examples\java-native\src\main\java\com\example\myproject\hello-world.exe
Criar Python
Para criar destinos Python, você precisa de:
No Windows, o Bazel cria dois arquivos de saída para py_binary regras:
- um arquivo ZIP autoextraível
- um arquivo executável que pode iniciar o interpretador do Python com o arquivo ZIP autoextraível como argumento
É possível executar o arquivo executável (ele tem uma .exe extensão) ou executar
o Python com o arquivo ZIP autoextraível como argumento.
Tente criar um destino em um dos nossos projetos de exemplo :
bazel build //examples/py_native:binbazel-bin\examples\py_native\bin.exepython bazel-bin\examples\py_native\bin.zip
Se você quiser detalhes sobre como o Bazel cria destinos Python no Windows, consulte este documento de design doc.