Pular para o conteúdo principal
Você pode desenvolver títulos do Microsoft Game Development Kit (GDK) usando o Clang/LLVM com o Visual Studio 2019, o Visual Studio 2022 ou o Visual Studio 2026 e o conjunto de ferramentas clang/LLVM for Windows v12 ou posterior. Esse conjunto de ferramentas usa o Visual C/C++ Runtime (a biblioteca Universal CRT + a Microsoft STL). Outras combinações de conjuntos de ferramentas e runtimes podem não ser executadas com êxito ou não passar na certificação de títulos. O Clang/LLVM for Windows com o conjunto de ferramentas de plataforma LLVM (clang-cl) (ou seja, o ClangCL) usa a Microsoft Standard C++ Library.

Versões e componentes necessários do Visual Studio

Você precisa do Visual Studio versão 16.11 ou posterior para usar o Clang/LLVM com o GDK. Selecione o componente C++ Clang Compiler for Windows em Individual Components ao instalar o Visual Studio. Clang Tools for Windows Dependendo da versão do Visual Studio que você está usando, os componentes necessários do Clang/LLVM podem se chamar C++ Clang Compiler for Windows e C++ Clang-cl for v142 build tools (x64/x86).
Se você modificar sua instalação existente do Visual Studio para adicionar o C++ Clang Compiler for Windows depois que o GDK for instalado, será necessário reparar a instalação do GDK antes de usar o Clang/LLVM.
Se você instalar o componente C++ Clang Compiler for Windows, a configuração do GDK instalará o suporte ao conjunto de ferramentas de plataforma ClangCl para as plataformas Gaming.Xbox.*.x64.

Opções do compilador e do vinculador

Para as plataformas Gaming.Xbox.*.x64, a linha de comando do clang/LLVM usada com o clang-cl.exe sempre inclui o seguinte:
Para Gaming.Xbox.Scarlett.x64, ela também adiciona -march=znver2. Essa opção define o AVX2 e alguns outros recursos específicos da CPU Hercules. Para Gaming.Xbox.XboxOne.x64, ela também adiciona -march=btver2. Essa opção define o AVX, o F16C e alguns outros recursos específicos da CPU Jaguar. Para obter mais informações sobre as opções recomendadas para o desenvolvimento com o GDK, consulte Recomendações de opções do compilador e do vinculador do Visual C++.

Intrínsecos de CPU compatíveis

O Clang/LLVM e o GNUC tratam os tipos SIMD SSE de forma diferente do Visual C++ e do Intel Compiler. Especificamente, os tipos __m128, __m128i e __m128d são tipos opacos em vez de structs, portanto, você não pode criar funções sobrecarregadas em C++ que usem esses tipos. Essa diferença também significa que o acesso direto a elementos por meio de __m128.m128_f32[] não é compilado no clang. Para o DirectXMath no Clang/LLVM, essa diferença faz com que todas as sobrecargas C++ de XMVECTOR sejam desabilitadas. Você também pode aceitar esse comportamento no Visual C++ para obter melhor portabilidade definindo o símbolo de pré-processador XM_NO_XMVECTOR_OVERLOADS antes de incluir os cabeçalhos do DirectXMath. O Visual C++ permite que você use intrínsecos de instruções avançadas mesmo que não esteja fazendo o build com /arch:AVX ou /arch:AVX2, mas o build do clang/LLVM falha nesse cenário sem as opções de compilador adequadas. Ao usar o Clang/LLVM, você deve adicionar a opção de compilador -march=btver2, -march=znver1, -march=znver2 ou -mf16c para usar os intrínsecos de conversão de meia precisão F16C _mm_cvtph_ps ou _mm_cvtps_ph. O DirectXMath no Windows 10 SDK (18363) ou anterior usava os intrínsecos CPUID incorretos para implementar XMVerifyCPUSupport para o Clang/LLVM. Esse problema foi corrigido no DirectXMath 3.14 no Windows 10 SDK (19041) ou posterior.

Usar o Clang/LLVM com o msbuild

Para usar o Clang/LLVM com um projeto do msbuild, defina o Platform Toolset como “LLVM (clang-cl)”. Você pode encontrar o Platform Toolset na guia General da caixa de diálogo de propriedades do projeto Visual C++, conforme mostrado na figura a seguir. Propriedade do msbuild para Clang/LLVM Você também pode definir o conjunto de ferramentas Clang/LLVM definindo diretamente a propriedade PlatformToolset do msbuild como ClangCl, conforme mostrado no exemplo a seguir.
Por padrão, o compilador Clang/LLVM gera significativamente mais avisos informativos em comparação com o MSVC. Portanto, nos locais com ‘TODO’, você vê tanto a saída de -W#pragma-messages como um aviso quanto um aviso -Wunused-value:

Usar o Clang/LLVM com o cmake

Os exemplos do GDK CMakeExample e CMakeGDKExample são um bom ponto de partida para integrar o Clang/LLVM aos seus projetos do cmake. Você pode baixar esses exemplos na página XBOX Developer Downloads.
Verifique se o componente C++ CMake tools for Windows do Visual Studio está instalado antes de tentar adicionar suporte ao Clang/LLVM aos seus projetos do cmake. O Visual Studio 2019 (16.11) é fornecido com o CMake 3.20. O Visual Studio 2022 é fornecido com o CMake 3.21 ou posterior.

Usar o CMakeExample

Use as etapas a seguir para habilitar o Clang/LLVM no projeto CMakeExample. O CMakeExample foi atualizado em março de 2022 para usar CMakePresets.json em vez da solução mais antiga CMakeSettings.json. Os CMake Presets são integrados ao Visual Studio 2019 16.10 ou posterior. Consulte esta postagem de blog.
  1. Use a opção Open Local Folder do Visual Studio para abrir a pasta Desktop, XBOX Series X|S ou XboxOne na pasta raiz do CMakeExample.

Integração com CMakePresets.json

  1. No Solution Explorer, clique duas vezes no arquivo CMakePresets.json.
Edite a variável XdkEditionTarget para que corresponda à sua edição atual do GDK.
  1. Selecione a predefinição x64-Debug-Clang ou x64-Release-Clang.

Integração com CMakeSettings.json

  1. No Solution Explorer, clique duas vezes no arquivo CMakeSettings.json.
  2. Selecione o ícone PLUS e escolha x64-Clang-Debug e x64-Clang-Release, conforme mostrado na figura a seguir. Salve as alterações.
Adicionar uma configuração do Clang em um projeto do cmake
  1. Selecione Edit Json e, em seguida, recorte e cole a seção de variáveis de outra configuração nas novas configurações do Clang, como no exemplo a seguir. Defina o valor de XDKEditionTarget como o apropriado para a sua versão do GDK, incluindo o nível de QFE.
  1. Depois de salvar todas as alterações, selecione x64-Clang-Debug ou x64-Clang-Release na lista suspensa de configuração de build e faça o build.

Usar o CMakeGDKExample

Use as etapas a seguir para habilitar o Clang/LLVM no projeto CMakeGDKExample.
  1. Use a opção Open Local Folder do Visual Studio para abrir a pasta CMakeGDKExample.

Integração com CMakePresets.json

  1. No Solution Explorer, clique duas vezes no arquivo CMakePresets.json.
Edite a variável XdkEditionTarget para que corresponda à sua edição atual do GDK.
  1. Selecione a predefinição x64-Scarlett-Clang ou x64-XboxOne-Clang.

Integração com CMakeSettings.json

  1. No Solution Explorer, clique duas vezes no arquivo CMakeSettings.json.
  2. Selecione a configuração que deseja editar. Defina o valor de Toolset como clang_cl_x64. Salve e feche.
Definir o valor de Toolset como "clang_cl_x64"
  1. Para as configurações de XBOX One e XBOX Series X|S, selecione Edit Json e verifique se a variável XdkEditionTarget corresponde à sua edição do GDK e ao nível de QFE.
  2. Selecione o valor desejado na lista suspensa de configuração e escolha Rebuild All no menu Build.
  3. Use File -> Open -> Project/Solution para selecionar a solução e o projeto gerados. Por exemplo:
CMakeGDKExample\out\build\GamingXboxOne-Debug\CMakeGDKExample.sln Agora você está pronto para fazer o build e implantar seu projeto.

Obter suporte

Para relatar bugs do compilador Visual C++, use Report a Problem… in Visual Studio Para relatar bugs do compilador clang/LLVM, use https://bugs.llvm.org/ Para relatar bugs da Microsoft Standard C++ Library (também conhecida como STL), use https://github.com/microsoft/STL/issues

Problemas conhecidos

  • O conjunto de ferramentas Clang/LLVM é significativamente mais detalhado que o Visual C++, especialmente quando você usa -Wall -Wextra -Wpedantic. No mínimo, suprima os seguintes avisos na linha de comando ou como um #pragma:
  • As ferramentas do XBOX funcionam apenas com PDBs da Microsoft para símbolos de depuração e não oferecem suporte às informações de depuração CodeView ou DWARF emitidas pelos arquivos .ld do LLVM.
  • A implementação da Geração de Código em Tempo de Vinculação do Clang/LLVM é nitidamente diferente da solução do Microsoft Visual C++. Não é possível misturar código que usa a Geração de Código em Tempo de Vinculação entre o MSVC e o clang/LLVM.
  • A partir da versão de outubro de 2022 e do Windows SDK (10.0.22621), as bibliotecas estáticas C++ incluem metadados do eXtended Flow Control Guard (XFG). O vinculador ld anterior à versão v15 sempre emite um aviso inofensivo quando você usa essas bibliotecas:
  • A integração do gerenciador de pacotes vcpkg com o MSBuild não funciona corretamente com o lld-link, pois usa curingas nos nomes de arquivos de biblioteca. Você pode contornar esse problema definindo <UseLldLink>false</UseLldLink> no vcxproj. Esse problema não afeta a integração do vcpkg com o CMake usando geradores de projeto do VS.
  • Ao fazer o build para XBOX com o clang v18 no modo C++20, dois símbolos ficam indefinidos ao usar os cabeçalhos WRL devido a alterações na avaliação de templates.
A solução alternativa a seguir resolve o problema:

Veja também

Visual Studio Recomendações de opções do compilador e do vinculador do Visual C++ Using CMake with Clang/LLVM Using MSBuild with Clang/LLVM
Última modificação em 8 de outubro de 2026