Skip to main content
Clang/LLVM을 사용하는 GDK 타이틀 개발은 Visual Studio 2019 또는 2022와 clang/LLVM for Windows 도구 집합 v12 이상을 사용하여 공식적으로 지원됩니다. 이 도구 집합은 Visual C/C++ 런타임(Universal CRT 라이브러리 + Microsoft STL)을 사용합니다. 다른 도구 집합 및 런타임 조합은 성공적으로 실행되거나 타이틀 인증을 통과하지 못할 수 있습니다. LLVM (clang-cl) (즉, ClangCL) 플랫폼 도구 집합을 사용하는 Clang/LLVM for Windows는 Microsoft Standard C++ Library를 사용합니다.

필요한 Visual Studio 버전 및 구성 요소

Microsoft Game Development Kit (GDK)에서 Clang/LLVM을 사용하려면 Visual Studio 버전 16.11 이상이 필요합니다. Visual Studio 2019 설치 시 C++를 사용한 데스크톱 개발 아래의 Windows용 C++ Clang 도구 구성 요소를 선택해야 합니다. 사용하는 Visual Studio 버전에 따라 필요한 Clang/LLVM 구성 요소의 이름이 Windows용 C++ Clang 컴파일러 및 **C++ Clang-cl for v142 build tools (x64/x86)**일 수 있습니다.
Microsoft Game Development Kit (GDK)가 설치된 후 기존 Visual Studio 설치를 수정하여 Windows용 C++ Clang 도구를 추가한 경우, Clang/LLVM을 사용하기 전에 Microsoft Game Development Kit (GDK) 설치를 복구해야 합니다.
Windows용 C++ Clang 도구 구성 요소가 설치된 경우, Microsoft Game Development Kit (GDK) 설정은 Gaming.Desktop.x64 플랫폼용 ClangCl 플랫폼 도구 집합에 대한 지원을 설치합니다.

컴파일러 및 링커 스위치

Gaming.Desktop.x64 플랫폼의 경우 clang-cl.exe와 함께 사용되는 clang/LLVM 명령줄에는 항상 다음이 포함됩니다.

지원되는 CPU 내장 함수

Clang/LLVM 및 GNUC는 SSE SIMD 유형을 Visual C++ 및 Intel Compiler와 다르게 처리합니다. 구체적으로, __m128, __m128i, __m128d 유형은 구조체가 아닌 불투명 유형으로 간주되므로 해당 유형을 사용하여 C++ 오버로드된 함수를 만들 수 없습니다. 이는 또한 __m128.m128_f32[]를 통한 직접 요소 액세스가 clang에서 컴파일되지 않는다는 것을 의미합니다. Clang/LLVM의 DirectXMath의 경우 이는 모든 XMVECTOR C++ 오버로드가 비활성화되는 결과를 초래합니다. DirectXMath 헤더를 포함하기 전에 전처리기 기호 XM_NO_XMVECTOR_OVERLOADS를 정의하여 Visual C++에서도 더 나은 이식성을 위해 이 동작을 선택할 수 있습니다. PC에서는 SSE와 SSE2가 아키텍처 정의의 일부이므로 모든 x64 네이티브 CPU에서 지원된다고 확신할 수 있습니다. Windows 10에서 지원하는 모든 최신 CPU에서 지원되므로 SSE3도 안전하게 요구할 수 있습니다. DirectXMath의 경우 이는 전처리기 정의 _XM_SSE3_INTRINSICS_를 정의하고 -march=sse3를 사용하여 clang/LLVM으로 빌드해야 한다는 것을 의미합니다. Visual C++는 현재 /arch:AVX 또는 /arch:AVX2로 빌드하지 않더라도 고급 명령 내장 함수를 사용할 수 있게 해주지만, clang/LLVM은 이 시나리오에서 적절한 컴파일러 스위치 없이는 빌드에 실패합니다. PC에서 SSE2를 넘어서는 사용에 대해서는 반드시 런타임 CPU 지원 검사를 수행하세요. Windows 10 SDK (18363) 이하의 DirectXMath는 Clang/LLVM용 XMVerifyCPUSupport를 구현하기 위해 잘못된 CPUID 내장 함수를 사용했습니다. 이는 Windows 10 SDK (19041) 이상의 DirectXMath 3.14에서 수정되었습니다.

msbuild와 함께 Clang/LLVM 사용

msbuild 프로젝트에서 Clang/LLVM을 사용하려면 플랫폼 도구 집합을 “LLVM (clang-cl)“로 설정하세요. 플랫폼 도구 집합은 다음 그림과 같이 Visual C++ 프로젝트 속성 대화 상자의 일반 탭 아래에서 찾을 수 있습니다. Clang/LLVM 도구 집합은 다음 예제와 같이 PlatformToolset msbuild 속성을 ClangCl로 직접 설정하여 설정할 수도 있습니다.
기본적으로 Clang/LLVM 컴파일러는 MSVC에 비해 훨씬 더 많은 정보성 경고를 생성합니다. 따라서 ‘TODO’ 위치에 대해 -W#pragma-messages 출력이 경고로, -Wunused-value 경고와 함께 표시됩니다.

cmake와 함께 Clang/LLVM 사용

CMakeExample 및 CMakeGDKExample Microsoft Game Development Kit (GDK) 샘플은 Clang/LLVM을 cmake 프로젝트에 통합하기 위한 좋은 시작점을 제공합니다. 다운로드 지침은 Microsoft Game Development Kit (GDK) 샘플을 참조하세요.
cmake 프로젝트에 Clang/LLVM 지원을 추가하기 전에 Windows용 C++ CMake 도구 Visual Studio 구성 요소가 설치되어 있는지 확인하세요. Visual Studio 2019 (16.11)는 CMake 3.20과 함께 제공됩니다. Visual Studio 2022는 CMake 3.21 이상과 함께 제공됩니다.

CMakeExample 사용

CMakeExample 프로젝트에서 Clang/LLVM을 활성화하려면 다음 단계를 사용하세요.
  1. Visual Studio의 로컬 폴더 열기 옵션을 사용하여 루트 CMakeExample 폴더의 Desktop 폴더를 엽니다.
CMakeExample은 2022년 3월에 이전 CMakeSettings.json 솔루션 대신 CMakePresets.json을 사용하도록 업데이트되었습니다. CMake 사전 설정은 Visual Studio 2019 16.10 이상과 통합되어 있습니다. 이 블로그 게시물을 참조하세요.

CMakePresets.json 통합

  1. 솔루션 탐색기에서 CMakePresets.json 파일을 두 번 클릭합니다.
XdkEditionTarget 변수를 현재 GDK 에디션과 일치하도록 편집합니다.
  1. x64-Debug-Clang 또는 x64-Release-Clang 사전 설정을 선택합니다.

CMakeSettings.json 통합

  1. 솔루션 탐색기에서 CMakeSettings.json 파일을 두 번 클릭합니다.
  2. 다음 그림과 같이 “PLUS” 아이콘을 선택하고 “x64-Clang-Debug” 및/또는 “x64-Clang-Release”를 선택합니다. 변경 사항을 저장합니다.
  1. “Edit Json”을 클릭한 다음 다음 예제와 같이 다른 구성의 variables 섹션을 잘라내어 새 Clang 구성에 붙여넣습니다. XDKEditionTarget 값을 QFE 수준을 포함한 GDK 버전에 적합한 값으로 설정합니다.
  1. 모든 변경 사항을 저장한 후 빌드 구성 드롭다운에서 x64-Clang-Debug 또는 x64-Clang-Release를 선택하고 빌드합니다.

CMakeGDKExample 사용

CMakeGDKExample 프로젝트에서 Clang/LLVM을 활성화하려면 다음 단계를 사용하세요.
  1. Visual Studio의 로컬 폴더 열기 옵션을 사용하여 CMakeGDKExample 폴더를 엽니다.

CMakePresets.json 통합

  1. 솔루션 탐색기에서 CMakePresets.json 파일을 두 번 클릭합니다.
XdkEditionTarget 변수를 현재 GDK 에디션과 일치하도록 편집합니다.
  1. x64-Desktop-Clang 사전 설정을 선택합니다.

CMakeSettings.json 통합

  1. 솔루션 탐색기에서 CMakeSettings.json 파일을 두 번 클릭합니다.
  2. 편집하려는 구성을 선택하고 Toolset 값을 “clang_cl_x64”로 설정합니다. 저장하고 닫습니다.
  1. XBOX One 및 XBOX Series X|S 구성의 경우 Edit Json을 선택하고 XdkEditionTarget 변수가 GDK 에디션 및 QFE 수준과 일치하는지 확인합니다.
  2. 구성 드롭다운에서 원하는 값을 선택하고 빌드 메뉴에서 모두 다시 빌드를 선택합니다.
  3. 파일 -> 열기 -> 프로젝트/솔루션을 사용하여 생성된 솔루션/프로젝트를 선택합니다. 예:
CMakeGDKExample\out\build\GamingXboxOne-Debug\CMakeGDKExample.sln 이제 프로젝트를 빌드하고 배포할 준비가 되었습니다.

지원 받기

Visual C++ 컴파일러 버그 신고는 Visual Studio의 문제 보고…를 사용하세요. clang/LLVM 컴파일러 버그 신고는 https://bugs.llvm.org/를 사용하세요. Microsoft Standard C++ Library(즉, STL) 버그 신고는 https://github.com/microsoft/STL/issues를 사용하세요.

알려진 문제

  • Clang/LLVM 도구 집합은 특히 -Wall -Wextra -Wpedantic을 사용할 때 Visual C++보다 훨씬 더 자세한 출력을 제공합니다. 최소한 명령줄이나 #pragma로 다음 경고를 억제하세요.
  • Microsoft Game Development Kit (GDK) 도구는 디버깅 기호에 대해 Microsoft PDB에서만 작동하며, LLVM .ld 파일에서 방출되는 CodeView 또는 DWARF 디버깅 정보는 지원하지 않습니다.
  • Clang/LLVM의 링크 타임 코드 생성 구현은 Microsoft Visual C++ 솔루션과 명확하게 다릅니다. 링크 타임 코드 생성을 사용하는 코드는 MSVC와 clang/LLVM 간에 혼합할 수 없습니다.
  • 2022년 10월 릴리스 및 Windows SDK (10.0.22621) 기준으로, C++ 정적 라이브러리에는 eXtended Flow Control Guard (XFG) 메타데이터가 포함됩니다. v15 릴리스 이전의 ld 링커는 이러한 라이브러리를 사용할 때 항상 무해한 경고를 방출합니다.

함께 보기

Visual Studio CMake와 함께 Clang/LLVM 사용 MSBuild와 함께 Clang/LLVM 사용
마지막 수정일 2026년 8월 24일