Pular para o conteúdo principal
O desenvolvimento de títulos do GDK usando Clang/LLVM tem suporte oficial com o Visual Studio 2019 ou 2022 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 ou não ser executadas com êxito ou 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 Biblioteca Padrão C++ da Microsoft.

Versões e componentes necessários do Visual Studio

O Visual Studio versão 16.11 ou posterior é necessário para usar Clang/LLVM com o Microsoft Game Development Kit (GDK). O componente C++ Clang Tools for Windows em Desenvolvimento para desktop com C++ deve ser selecionado ao instalar o Visual Studio 2019. 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 a instalação existente do Visual Studio para adicionar o C++ Clang Tools for Windows depois que o Microsoft Game Development Kit (GDK) tiver sido instalado, precisará reparar a instalação do Microsoft Game Development Kit (GDK) antes de usar o Clang/LLVM.
Se o componente C++ Clang Tools for Windows tiver sido instalado, a instalação do Microsoft Game Development Kit (GDK) instalará o suporte ao conjunto de ferramentas de plataforma ClangCl para as plataformas Gaming.Desktop.x64.

Opções do compilador e do vinculador

Para as plataformas Gaming.Desktop.x64, a linha de comando do clang/LLVM usada com o clang-cl.exe sempre incluirá:

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 considerados tipos opacos em vez de structs, portanto você não pode criar funções C++ sobrecarregadas usando esses tipos. Isso também significa que o acesso direto aos elementos via __m128.m128_f32[] não será compilado no clang. Observe que, para o DirectXMath no Clang/LLVM, isso faz com que todas as sobrecargas C++ de XMVECTOR sejam desabilitadas. Você também pode optar por esse comportamento no Visual C++ para obter melhor portabilidade, definindo o símbolo do pré-processador XM_NO_XMVECTOR_OVERLOADS antes de incluir os cabeçalhos do DirectXMath. No PC, você pode contar com o suporte a SSE e SSE2 em todas as CPUs nativas x64, pois isso faz parte da definição da arquitetura. Você também pode exigir SSE3 com segurança, pois ele é compatível com todas as CPUs modernas compatíveis com o Windows 10. Para o DirectXMath, isso significa que você pode definir a diretiva de pré-processador _XM_SSE3_INTRINSICS_ e deve compilar com clang/LLVM usando -march=sse3. O Visual C++ permite usar intrínsecos de instruções avançadas mesmo que você não esteja compilando com /arch:AVX ou /arch:AVX2, mas o clang/LLVM falhará ao compilar nesse cenário sem as opções de compilador adequadas. Faça verificações de suporte da CPU em tempo de execução para tudo o que você usar além do SSE2 no PC. O DirectXMath no Windows 10 SDK (18363) ou anterior usava os intrínsecos de CPUID errados para implementar XMVerifyCPUSupport para o Clang/LLVM. Isso foi corrigido no DirectXMath 3.14 no Windows 10 SDK (19041) ou posterior.

Usar Clang/LLVM com o msbuild

Para usar Clang/LLVM com um projeto msbuild, defina o Conjunto de Ferramentas da Plataforma como “LLVM (clang-cl)”. O Conjunto de Ferramentas da Plataforma pode ser encontrado na guia Geral da caixa de diálogo de propriedades do projeto do Visual C++, conforme mostrado na figura a seguir. Propriedade do msbuild para Clang/LLVM O conjunto de ferramentas Clang/LLVM também pode ser definido diretamente configurando a propriedade do msbuild PlatformToolset 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 ‘TODO’, você verá tanto a saída -W#pragma-messages como um aviso quanto um aviso -Wunused-value:

Usar Clang/LLVM com o cmake

Os exemplos CMakeExample e CMakeGDKExample do Microsoft Game Development Kit (GDK) fornecem um bom ponto de partida para integrar o Clang/LLVM aos seus projetos cmake. Veja os exemplos do Microsoft Game Development Kit (GDK) para obter instruções de download.
Verifique se o componente Ferramentas do CMake C++ para Windows do Visual Studio está instalado antes de tentar adicionar o suporte ao Clang/LLVM aos seus projetos 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 com o projeto CMakeExample.
  1. Use a opção Abrir uma pasta local do Visual Studio para abrir a pasta Desktop na pasta raiz do CMakeExample.
O CMakeExample foi atualizado em março de 2022 para usar CMakePresets.json em vez da solução CMakeSettings.json mais antiga. As predefinições do CMake são integradas ao Visual Studio 2019 16.10 ou posterior. Veja esta postagem de blog.

Integração com CMakePresets.json

  1. Clique duas vezes no arquivo CMakePresets.json no Gerenciador de Soluções.
Edite a variável XdkEditionTarget para corresponder à sua edição atual do GDK.
  1. Selecione a predefinição x64-Debug-Clang ou x64-Release-Clang.

Integração com CMakeSettings.json

  1. Clique duas vezes no arquivo CMakeSettings.json no Gerenciador de Soluções.
  2. Selecione o ícone “MAIS” e escolha “x64-Clang-Debug” e/ou “x64-Clang-Release”, conforme mostrado na figura a seguir. Salve as alterações.
Adição de uma configuração do Clang em um projeto cmake
  1. Clique em “Editar JSON” e 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ções de build e compile.

Usar o CMakeGDKExample

Use as etapas a seguir para habilitar o Clang/LLVM com o projeto CMakeGDKExample.
  1. Use a opção Abrir uma pasta local do Visual Studio para abrir a pasta CMakeGDKExample.

Integração com CMakePresets.json

  1. Clique duas vezes no arquivo CMakePresets.json no Gerenciador de Soluções.
Edite a variável XdkEditionTarget para corresponder à sua edição atual do GDK.
  1. Selecione a predefinição x64-Desktop-Clang.

Integração com CMakeSettings.json

  1. Clique duas vezes no arquivo CMakeSettings.json no Gerenciador de Soluções.
  2. Selecione a configuração que você deseja editar e defina o valor de Toolset como “clang_cl_x64”. Salve e feche.
Definição do valor de Toolset como "clang_cl_x64"
  1. Para as configurações do XBOX One e do XBOX Series X|S, selecione Editar 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ções e escolha Recompilar Tudo no menu Compilar.
  3. Use Arquivo -> Abrir -> Projeto/Solução para selecionar a solução/projeto gerado. Por exemplo:
CMakeGDKExample\out\build\GamingXboxOne-Debug\CMakeGDKExample.sln Agora você está pronto para compilar e implantar seu projeto.

Obter suporte

Para relatar bugs do compilador Visual C++, use Relatar um Problema… no Visual Studio Para relatar bugs do compilador clang/LLVM, use https://bugs.llvm.org/ Para relatar bugs da Biblioteca Padrão C++ da Microsoft (também conhecida como STL), use https://github.com/microsoft/STL/issues

Problemas conhecidos

  • O conjunto de ferramentas Clang/LLVM é significativamente mais detalhado do que o Visual C++, especialmente ao usar -Wall -Wextra -Wpedantic. No mínimo, suprima os seguintes avisos na linha de comando ou como #pragma:
  • As ferramentas do Microsoft Game Development Kit (GDK) 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 em arquivos .ld do LLVM.
  • A implementação da Geração de Código Durante o Tempo de Vinculação do Clang/LLVM é distintamente diferente da solução do Microsoft Visual C++. Códigos que usam a Geração de Código Durante o Tempo de Vinculação não podem ser misturados 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 emitirá um aviso inofensivo ao usar essas bibliotecas:

Veja também

Visual Studio Usar o CMake com Clang/LLVM Usar o MSBuild com Clang/LLVM
Última modificação em 8 de outubro de 2026