Nesta página, você vai conhecer 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. Veja os problemas em aberto aqui.
Práticas recomendadas
Evitar problemas de caminho longo
Algumas ferramentas têm a limitação máxima do tamanho do caminho no Windows, incluindo o compilador MSVC. Para evitar esse problema, especifique um diretório de saída curto para o Bazel pela sinalização --output_user_root.
Por exemplo, adicione a seguinte linha ao seu arquivo bazelrc:
startup --output_user_root=C:/tmp
Ativar a compatibilidade com nome de arquivo 8.3
O Bazel tenta criar uma versão de nome curto para caminhos longos de arquivo. No entanto, para isso, o suporte ao nome de arquivo 8.3 precisa estar ativado no volume em que o arquivo com o caminho longo está localizado. É possível ativar a criação de nomes do 8.3 em todos os volumes executando o seguinte comando:
fsutil 8dot3name set 0
Ativar suporte a link simbólico
Alguns recursos exigem que o Bazel crie links simbólicos de arquivo 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:
- --windows_enable_symlinks (link em inglês)
- --enable_runfiles (em inglês)
Para facilitar, adicione as seguintes linhas ao seu arquivo bazelrc:
startup --windows_enable_symlinks
build --enable_runfiles
Observação: criar links simbólicos no Windows é uma operação custosa. A sinalização --enable_runfiles
pode criar uma grande quantidade de links simbólicos de arquivos. Ative esse recurso apenas quando necessário.
Executar o Bazel: shell MSYS2 vs. 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 no bash
, seja do shell MSYS2, do Git Bash, do Cygwin ou de qualquer outra variante do Bash. Embora o Bazel
funcione para a maioria dos casos de uso, algumas coisas estão corrompidas, como
interromper o build com Ctrl+C do MSYS2.
Além disso, se você executar em MSYS2, será necessário desativar a conversão automática de caminho do MSYS2.
Caso contrário, o MSYS converterá os argumentos da linha de comando
semelhantes a caminhos do Unix (como //foo:bar
) em caminhos do Windows. Consulte esta resposta do StackOverflow (em inglês) para mais detalhes.
Como usar o Bazel sem Bash (MSYS2)
Como usar o build do bazel sem Bash
As versões do Bazel anteriores à versão 1.0 exigiam que o Bash criasse algumas regras.
A partir do Bazel 1.0, você pode criar qualquer regra sem Bash, a menos que seja um:
genrule
, porque as regras gerais executam comandos Bash- Regra
sh_binary
oush_test
, porque elas precisam de base - Regra Starlark que usa
ctx.actions.run_shell()
ouctx.resolve_command()
No entanto, o genrule
é frequentemente usado para tarefas simples, como
copiar um arquivo
ou criar um arquivo de texto.
Em vez de usar genrule
, e dependendo do Bash, você vai encontrar uma regra adequada
no
repositório bazel-skylib (em inglês).
No Windows, essas regras não exigem Bash.
Como usar o teste bazel sem Bash
As versões do Bazel anteriores à versão 1.0 exigiam que o Bash usasse bazel test
para tudo.
A partir do Bazel 1.0, você pode testar qualquer regra sem Bash, exceto quando:
- você usa
--run_under
- a própria regra de teste exige Bash (porque o executável é um script de shell).
Como usar o Bazel sem o Bash
As versões do Bazel anteriores à versão 1.0 exigiam que o Bash usasse bazel run
para tudo.
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 exige Bash (porque o executável é um script de shell).
Usar regras shbinary e sh* e ctx.actions.run_shell() sem Bash
Você precisa que o Bash crie e teste regras sh_*
e crie e teste regras
do Starlark que usam ctx.actions.run_shell()
e ctx.resolve_command()
. Isso
se aplica não apenas às regras em 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 do Windows para Linux (WSL) para criar essas regras, mas atualmente isso não é uma prioridade para a subequipe do Bazel-on-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 de prompt de comando. Se você iniciar um novo cmd.exe
, será necessário
definir as variáveis novamente. Para definir as variáveis sempre que cmd.exe
for 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 em C++ com o MSVC
Para criar destinos de C++ com o MSVC, você precisa de:
O Visual C++ compilador (link em inglês).
(Opcional) As variáveis de ambiente
BAZEL_VC
eBAZEL_VC_FULL_VERSION
.O Bazel detecta automaticamente o compilador Visual C++ no seu sistema. Para pedir para o Bazel usar uma instalação de VC específica, é possível definir as seguintes variáveis de ambiente:
Para o Visual Studio 2017 e 2019, defina um
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) apenas para o Visual Studio 2017 e 2019, o número completo da versão das ferramentas de criação do Visual C++. Você poderá escolher a versão exata das ferramentas de compilação do Visual C++ viaBAZEL_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 anterior, 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 do Windows, incluindo o próprio Bazel. Por padrão, será usado o SDK mais recente do Windows. 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 (somente uma versão do SDK do Windows 8.1 está disponível). Verifique se o SDK do Windows especificado está instalado.Requisito: compatível com a versão 2017 e 2019 da VC. As ferramentas de compilação independentes do VC 2015 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_VERSION
será 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 amostra:
bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe
Por padrão, os binários criados são direcionados à 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 vinculadas dinamicamente (arquivos DLL), consulte este exemplo.
Limite de comprimento da linha de comando: para evitar o
problema no limite de tamanho da linha de comando do Windows,
ative o recurso do arquivo de parâmetro do compilador por --features=compiler_param_file
.
Criar C++ com o Clang
A partir da versão 0.29.0, o Bazel é compatível com a criação usando o driver de compilação compatível com MSVC do LLVM (clang-cl.exe
).
Requisito: para criar com o Clang, você precisa instalar ambas
as ferramentas LLVM e Visual C++ Build,
porque, embora você use clang-cl.exe
como compilador, ainda é necessário se vincular a
bibliotecas Visual C++.
O Bazel pode detectar automaticamente a instalação do LLVM no sistema ou informar explicitamente
ao Bazel onde o LLVM está instalado, BAZEL_LLVM
.
BAZEL_LLVM
é o diretório de instalação do LLVM.set BAZEL_LLVM=C:\Program Files\LLVM
Para ativar o conjunto de ferramentas do Clang para criar C++, há várias situações.
No bazel 0.28 e anteriores, não há suporte para o Clang.
Sem
--incompatible_enable_cc_toolchain_resolution
: você pode ativar o conjunto de ferramentas do Clang por uma sinalização de build--compiler=clang-cl
.Com
--incompatible_enable_cc_toolchain_resolution
: você precisa adicionar um destino de plataforma aoBUILD 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, é possível ativar o conjunto de ferramentas do Clang de uma destas duas maneiras:
- Especifique as seguintes sinalizações 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 sinalização --compatible_enable_cc_toolchain_resolution será ativada por padrão em uma versão futura do Bazel. Portanto, é recomendável ativar o suporte do 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 as regras java_binary
:
- um arquivo
.jar
- Um arquivo
.exe
que pode configurar o ambiente para a JVM e executar o binário.
Tente criar um destino em um dos nossos projetos de amostra:
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 de Python, você precisa de:
No Windows, o Bazel cria dois arquivos de saída para as regras py_binary
:
- um arquivo ZIP de extração automática
- um arquivo executável que inicia o intérprete de Python com o arquivo ZIP de extração automática como argumento.
É possível executar o arquivo executável (com uma extensão .exe
) ou o Python com o arquivo ZIP de extração automática como argumento.
Tente criar um destino em um dos nossos projetos de amostra:
bazel build //examples/py_native:bin
bazel-bin\examples\py_native\bin.exe
python bazel-bin\examples\py_native\bin.zip
Se você tiver interesse em detalhes sobre como o Bazel cria destinos de Python no Windows, confira este documento de design.