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.
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.
Gaming.Desktop.x64.
Opções do compilador e do vinculador
Para as plataformasGaming.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é-processadorXM_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.
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.- Use a opção Abrir uma pasta local do Visual Studio para abrir a pasta Desktop na pasta raiz do CMakeExample.
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
- Clique duas vezes no arquivo CMakePresets.json no Gerenciador de Soluções.
XdkEditionTarget para corresponder à sua edição atual do GDK.
- Selecione a predefinição
x64-Debug-Clangoux64-Release-Clang.
Integração com CMakeSettings.json
- Clique duas vezes no arquivo CMakeSettings.json no Gerenciador de Soluções.
- Selecione o ícone “MAIS” e escolha “x64-Clang-Debug” e/ou “x64-Clang-Release”, conforme mostrado na figura a seguir. Salve as alterações.

- 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.
- 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.- Use a opção Abrir uma pasta local do Visual Studio para abrir a pasta CMakeGDKExample.
Integração com CMakePresets.json
- Clique duas vezes no arquivo CMakePresets.json no Gerenciador de Soluções.
XdkEditionTarget para corresponder à sua edição atual do GDK.
- Selecione a predefinição
x64-Desktop-Clang.
Integração com CMakeSettings.json
- Clique duas vezes no arquivo CMakeSettings.json no Gerenciador de Soluções.
- Selecione a configuração que você deseja editar e defina o valor de Toolset como “clang_cl_x64”. Salve e feche.

- 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.
- Selecione o valor desejado na lista suspensa de configurações e escolha Recompilar Tudo no menu Compilar.
- Use Arquivo -> Abrir -> Projeto/Solução para selecionar a solução/projeto gerado. Por exemplo:
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/issuesProblemas 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
ldanterior à versão v15 sempre emitirá um aviso inofensivo ao usar essas bibliotecas:
