Nesta página, você verá as práticas recomendadas para usar o Bazel no Windows. Para instalação instruções, consulte Instalar o Bazel no Windows.
Problemas conhecidos
Os problemas do Bazel relacionados ao Windows são marcados com o ícone "team-Windows" no GitHub. Confira 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 flag --output_user_root.
Por exemplo, adicione a seguinte linha ao arquivo do Bazelrc:
startup --output_user_root=C:/tmp
Ativar suporte a nome de arquivo 8.3
O Bazel tenta criar uma versão de nome curto para caminhos de arquivo longos. 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 reside. Execute o comando a seguir para ativar a criação de nomes do 8.3 em todos os volumes:
fsutil 8dot3name set 0
Ativar a compatibilidade com link simbólico
Alguns recursos exigem que o Bazel crie links simbólicos de arquivos no Windows. ativando a 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 estas linhas ao arquivo Baselrc:
startup --windows_enable_symlinks
build --enable_runfiles
Observação: a criação de links simbólicos no Windows é uma operação dispendiosa. A flag --enable_runfiles
pode criar uma grande quantidade de links simbólicos de arquivo. Ative esse recurso somente quando precisar dele.
Execução do Bazel: shell MSYS2 x prompt de comando x PowerShell
Recomendação:execute o Bazel a partir do prompt de comando (cmd.exe
) ou do
PowerShell.
A partir de 15/01/2020, não execute o Bazel usando bash
.
do shell MSYS2, Git Bash, Cygwin ou qualquer outra variante do Bash. Enquanto o Bazel
pode funcionar na maioria dos casos de uso, algumas coisas estão com problemas, como
interromper o build usando Ctrl+C no MSYS2).
Além disso, se você optar por executar no MSYS2, precisará desativar o
conversão automática de caminho; caso contrário, o MSYS converterá argumentos de linha de comando.
parecidos com caminhos Unix (como //foo:bar
) em caminhos do Windows. Consulte
esta resposta do StackOverflow
para mais detalhes.
Como usar o Bazel sem Bash (MSYS2)
Como usar o build do Bazel sem Bash
As versões do Bazel anteriores à 1.0 costumavam exigir que o Bash criasse algumas regras.
A partir do Bazel 1.0, é possível criar qualquer regra sem Bash, a menos que ela seja:
genrule
, porque as regras gerais executam comandos Bash- a regra
sh_binary
oush_test
, porque elas precisam de Bash inerentemente. - Regra do Starlark que usa
ctx.actions.run_shell()
ouctx.resolve_command()
No entanto, genrule
é frequentemente usado para tarefas simples, como
como copiar um arquivo
ou gravar um arquivo de texto.
Em vez de usar genrule
(e dependendo de Bash), você pode encontrar uma regra adequada.
no
repositório bazel-skylib (em inglês).
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 costumavam exigir o Bash para executar bazel test
em qualquer coisa.
A partir do Bazel 1.0, é possível testar qualquer regra sem o 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 a execução do Bazel sem Bash
As versões do Bazel anteriores à 1.0 costumavam exigir o Bash para executar bazel run
em qualquer coisa.
A partir do Bazel 1.0, é possível executar qualquer regra sem o 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).
Uso das regras sh_binary e sh_* e ctx.actions.run_shell() sem Bash
Você precisa do Bash para criar e testar as regras de sh_*
e para criar e testar o Starlark
regras que usam ctx.actions.run_shell()
e ctx.resolve_command()
. Isso
se aplica não só às regras em seu projeto, mas também às regras em qualquer
de que o projeto depende (mesmo de forma transitiva).
No futuro, poderá haver a opção de usar o Subsistema Windows para Linux (WSL) para criar essas regras, mas atualmente 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 apenas
definida na sessão do prompt de comando. Se você iniciar uma nova cmd.exe
, vai precisar
defina as variáveis novamente. Para sempre definir as variáveis quando cmd.exe
for iniciado,
pode adicioná-las à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 C++ com MSVC, você precisa de:
(Opcional) As variáveis de ambiente
BAZEL_VC
eBAZEL_VC_FULL_VERSION
.O Bazel detecta automaticamente o compilador Visual C++ no sistema. Para dizer ao Bazel para usar uma instalação específica de videoconferência, você pode definir o variáveis de ambiente a seguir:
Para o Visual Studio 2017 e 2019, defina uma destas opções:
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, a versão completa das ferramentas de build do Visual C++. Você pode escolher as ferramentas de build do Visual C++ versão 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
A guia Windows SDK do Cloud.
O SDK do Windows contém os arquivos principais e as bibliotecas que você precisa para criar aplicativos do Windows, incluindo o próprio Bazel. Por padrão, o SDK do Windows mais recente instalado ser usados. Também é possível especificar a versão do SDK do Windows definindo
BAZEL_WINSDK_FULL_VERSION
. Você É possível usar um número completo do SDK do Windows 10, como 10.0.10240.0, ou especificar 8.1 para usar o Windows 8.1 SDK (somente uma versão do SDK do Windows 8.1 está disponível). Verifique se você tem as especificações SDK do Windows instalado.Requisito: compatível com o VC 2017 e 2019. O VC 2015 Build Tools autônomo não suporte selecionando o 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ê já pode criar um destino C++.
Tente criar um destino com base em um de nossos exemplos projetos:
bazel build //examples/cpp:hello-world
bazel-bin\examples\cpp\hello-world.exe
Por padrão, os binários criados são voltados à arquitetura x64. Para especificar um intervalo
arquitetura de destino, 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 construir e usar Bibliotecas dinamicamente vinculadas (arquivos DLL), consulte este exemplo.
Limite de comprimento da linha de comando: para impedir que os
Problema de limite de comprimento da linha de comando do Windows,
ative o recurso de arquivo de parâmetros do compilador usando --features=compiler_param_file
.
Criar em C++ com o Clang
A partir da versão 0.29.0, o Bazel oferece suporte à compilação com o driver do compilador LLVM compatível com MSVC (clang-cl.exe
).
Requisito: para criar com o Clang, é necessário instalar ambos
LLVM e ferramentas de build do Visual C++
porque, embora você use clang-cl.exe
como compilador, ainda é necessário vincular ao
Bibliotecas do Visual C++.
O Bazel pode detectar automaticamente a instalação do LLVM no sistema, ou você pode dizer
Bazel em que o LLVM é instalado pelo BAZEL_LLVM
.
BAZEL_LLVM
: o diretório de instalação do LLVM.set BAZEL_LLVM=C:\Program Files\LLVM
Há várias situações para ativar o conjunto de ferramentas do Clang para criar C++.
No Bazel 0.28 e versões 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 flag 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, você pode ativar o conjunto de ferramentas do Clang usando 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
MODULE.bazel
:
register_execution_platforms( ":x64_windows-clang-cl" ) register_toolchains( "@local_config_cc//:cc-toolchain-x64_windows-clang-cl", )
A instância --incompatible_enable_cc_toolchain_resolution a flag será ativada por padrão em uma versão futura do Bazel. Portanto, é recomendável ativar o suporte ao Clang na 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 com base em um de nossos exemplos projetos:
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 as regras py_binary
:
- um arquivo ZIP autoextraível
- um arquivo executável que pode iniciar o interpretador Python com a arquivo zip de extração automática como argumento
É possível executar o arquivo executável (ele tem uma extensão .exe
) ou executar
Python com o arquivo ZIP de autoextração como argumento.
Tente criar um destino com base em um de nossos exemplos projetos:
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 Python em Windows, confira este design doc.