|
| 1 | + |
| 2 | +# LLVM/Clang Demo Project |
| 3 | + |
| 4 | +- > [English README](README.md) |
| 5 | +
|
| 6 | +- 본 프로젝트는 **`LLVM`/`Clang` 기반 `C++` 컴파일 환경**, **`VSCode` 개발 설정**, **`C++20~26` 최신 기능을 활용한 예제 코드** 를 포함한 최소/완성형 템플릿입니다. |
| 7 | +- `Windows`·`Linux` 에서 공통적으로 동일한 구조로 사용하도록 설계되었습니다. |
| 8 | + |
| 9 | +<br /> |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## 1. 프로젝트 구성 개요 |
| 14 | + |
| 15 | +- 이 프로젝트는 다음을 포함합니다: |
| 16 | + - **`CMake` 기반 빌드 시스템** |
| 17 | + - **`clang` / `clang++` 강제 사용 설정** |
| 18 | + - **`C++26` 컴파일 활성화** |
| 19 | + - **`LLD` 링크 사용(`-fuse-ld=lld`)** |
| 20 | + - **`VSCode` 개발 환경 설정 (`IntelliSense`, `clangd`, `LLDB DAP`)** |
| 21 | + - **`C++20`/`23`/`26` 기능을 사용한 예제 코드(`main.cpp`)** |
| 22 | + |
| 23 | +<br /> |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +## 2. 주요 파일 설명 |
| 28 | + |
| 29 | +### 2.1 `CMakeLists.txt` |
| 30 | + |
| 31 | +- `LLVM_HOME` 환경 변수를 우선 적용 |
| 32 | + - `Windows` 환경에서 자동으로 `C:/llvm-package` 사용 |
| 33 | +- `clang`, `clang++`을 강제 `CMAKE_C_COMPILER` / `CMAKE_CXX_COMPILER`로 설정 |
| 34 | +- `LLD` 링크 사용 (`-fuse-ld=lld`) |
| 35 | +- `C++26` 컴파일 활성화 (`target_compile_features(... cxx_std_26)`) |
| 36 | +- `compile_commands.json` 자동 생성 |
| 37 | + |
| 38 | +<br /> |
| 39 | + |
| 40 | +➡ **VSCode + clangd 사용자의 기본 구조로 매우 이상적입니다.** |
| 41 | + |
| 42 | +<br /> |
| 43 | + |
| 44 | +--- |
| 45 | + |
| 46 | +### 2.2 예제 (`main.cpp`) |
| 47 | + |
| 48 | +* `C++20` `ranges` / `views` / `std::format` |
| 49 | +* `C++23` `std::expected` |
| 50 | +* `C++26` `deducing this` 문법 적용 (`Point::move`) |
| 51 | +* 고급 예제 포함(필터링·변환·`join view`·구조화된 메시지 생성 등) |
| 52 | + |
| 53 | +<br /> |
| 54 | + |
| 55 | +- 이 파일 하나만으로 **`C++20~26` 기능의 실제 실행 예제** 를 모두 확인할 수 있습니다. |
| 56 | + |
| 57 | +<br /> |
| 58 | + |
| 59 | +--- |
| 60 | + |
| 61 | +### 2.3 `VSCode` 설정 파일 |
| 62 | + |
| 63 | +#### 2.3.1 `c_cpp_properties.json` |
| 64 | + |
| 65 | +- `IntelliSense` 엔진을 `clang` 기반으로 설정 |
| 66 | +- `compile_commands.json`을 자동 참고 |
| 67 | +- `includePath` 기본 설정 |
| 68 | + |
| 69 | +#### 2.3.2 extensions.json |
| 70 | + |
| 71 | +- 다음 확장 자동 추천 |
| 72 | + - `ms-vscode.cmake-tools` |
| 73 | + - `ms-vscode.cpptools` |
| 74 | + - `llvm-vs-code-extensions.vscode-clangd` |
| 75 | + |
| 76 | +#### 2.3.3 `launch.json` |
| 77 | + |
| 78 | +- **`LLDB-DAP` 기반 디버깅 설정** |
| 79 | +- `OS`별 실행 파일 자동 분기 (`Windows`는 `hello.exe`) |
| 80 | + |
| 81 | +#### 2.3.4 `settings.json` |
| 82 | + |
| 83 | +- `CMake generator = Ninja` |
| 84 | +- `clang++`를 `IntelliSense` 기본 컴파일러로 설정 |
| 85 | +- `editor.formatOnSave` 옵션 |
| 86 | + |
| 87 | +#### 2.3.5 `tasks.json` |
| 88 | + |
| 89 | +- `CMake Configure` |
| 90 | +- `CMake Build` |
| 91 | +- `VSCode` 빌드 자동화 구성 |
| 92 | + |
| 93 | +<br /> |
| 94 | + |
| 95 | +--- |
| 96 | + |
| 97 | +## 3. 빌드 및 실행 방법 |
| 98 | + |
| 99 | +### 3.1 `Windows` / `Linux` 공통 |
| 100 | + |
| 101 | +```bash |
| 102 | +cmake -S . -B build -G Ninja |
| 103 | +cmake --build build --config Debug |
| 104 | +``` |
| 105 | + |
| 106 | +### 3.2 실행 |
| 107 | + |
| 108 | +#### `Linux` |
| 109 | + |
| 110 | +```bash |
| 111 | +./build/hello |
| 112 | +``` |
| 113 | + |
| 114 | +#### Windows |
| 115 | + |
| 116 | +```powershell |
| 117 | +.\build\hello.exe |
| 118 | +``` |
| 119 | + |
| 120 | +<br /> |
| 121 | + |
| 122 | +--- |
| 123 | + |
| 124 | +## 4. 디버깅 (`VSCode`) |
| 125 | + |
| 126 | +- (1) **확장 설치** |
| 127 | + - `ms-vscode.cmake-tools` |
| 128 | + - `llvm-vs-code-extensions.vscode-clangd` |
| 129 | + - `llvm-vs-code-extensions.lldb-dap` |
| 130 | + |
| 131 | +- (2) `VSCode` 왼쪽 실행/디버그 메뉴 → **Debug (lldb-dap)** 실행 |
| 132 | + |
| 133 | +<br /> |
| 134 | + |
| 135 | +--- |
| 136 | + |
| 137 | +## 5. `C++` 예제 코드 특징 |
| 138 | + |
| 139 | +* **C++20 / C++23 / C++26 주요 신기능 실제 실행 가능** |
| 140 | +* `ranges`, `views`, `format`, `expected` 모두 포함 |
| 141 | +* "`deducing this`" 문법을 사용한 연산자 체이닝 스타일 사용 |
| 142 | +* 예제 메시지를 스트링으로 조립하여 `main`에서 출력 |
| 143 | + |
| 144 | +<br /> |
| 145 | + |
| 146 | +--- |
| 147 | + |
| 148 | +## 6. 프로젝트 구조 |
| 149 | + |
| 150 | +``` |
| 151 | +project_root/ |
| 152 | +│ CMakeLists.txt |
| 153 | +│ main.cpp |
| 154 | +│ |
| 155 | +├─ .vscode/ |
| 156 | +│ ├─ c_cpp_properties.json |
| 157 | +│ ├─ extensions.json |
| 158 | +│ ├─ launch.json |
| 159 | +│ ├─ settings.json |
| 160 | +│ └─ tasks.json |
| 161 | +│ |
| 162 | +└─ build/ (cmake가 생성) |
| 163 | +``` |
| 164 | + |
| 165 | +<br /> |
| 166 | + |
| 167 | +--- |
| 168 | + |
| 169 | +## 7. 이 템플릿의 사용처 |
| 170 | + |
| 171 | +- `LLVM`/`Clang` 개발 환경 테스트 |
| 172 | +- 최신 `C++` 표준(`C++20~C++26`) 실험 |
| 173 | +- `VSCode` + `clangd` + `LLDB` 기반 `C++` 프로젝트 기본 구조 |
| 174 | +- `CMake` 기반 멀티플랫폼 템플릿 |
| 175 | + |
| 176 | +<br /> |
| 177 | + |
| 178 | +--- |
| 179 | + |
| 180 | +## 8. 라이선스 |
| 181 | + |
| 182 | +- MIT |
| 183 | + |
0 commit comments