推荐直接安装llvm官方预编译二进制包(如llvm-19.1.7-win64.exe),勾选“add llvm to path”,验证clang和llvm-config版本;chocolatey适合自动化部署但版本控制受限;源码编译仅限定制需求,耗时长且易失败。

llvm-project 安装包(含 clang、lld、llc 等),开箱即用,95% 的场景够用。
用官方安装包(推荐新手)
去 LLVM 官网下载页(https://github.com/llvm/llvm-project/releases)找最新稳定版的 LLVM-*.exe(比如 LLVM-19.1.7-win64.exe)。注意选带 win64 后缀的,别下错成 src 或 clang+llvm 分离包。
安装时勾选「Add LLVM to the system PATH for all users」——这一步必须打勾,否则后续命令行里找不到 clang。
装完打开新 PowerShell,执行:clang --versionllvm-config --version
如果都返回版本号(如 19.1.7),说明路径和基础环境已就位。
常见坑:
• 安装后不重启终端或不新开 PowerShell,PATH 不生效
• 用旧版 PowerShell(v5.x)可能因策略限制报错,建议用 Windows Terminal 或升级到 PowerShell 7+
• 如果系统已有 MinGW 或 MSVC 的 clang(比如 Qt 自带的),会冲突,优先删掉或临时移出 PATH
用 Chocolatey(适合自动化部署)
如果你习惯用包管理器,且机器已装 Chocolatey:choco install llvm
它会自动下载、解压、注册 PATH,并且支持 choco upgrade llvm 快速更新。比手动点安装包更适合 CI 或多机部署。
但注意:
• Chocolatey 默认装的是最新稳定版,不一定匹配你项目要求的 LLVM 小版本(比如 TVM 0.18 要求 ≤14.0.6)
• 它不会覆盖已存在的 llvm-config,但多个 LLVM 并存时,PATH 顺序决定谁生效
• 若需指定版本,得用 choco install llvm --version=14.0.6,但老版本未必还在仓库中
源码编译 LLVM(仅限有明确需求)
除非你要:
• 打补丁(如 OLLVM、MLIR 自定义 Pass)
• 为特定 NDK 版本定制 clang(比如 Android 编译)
• 开发 LLVM 本身或调试 IR 生成逻辑
否则不建议在 Win11 上源码编译。耗时长(Release 模式常超 2 小时)、磁盘占 30GB+、依赖 Visual Studio 2022 + CMake 3.24+ + Python 3.9+,且中途容易因内存不足、路径含空格、杀毒软件拦截而失败。
若真要编译:
• 用 VS 2022 的 x64 Native Tools Command Prompt,别用普通 PowerShell
• cmake -S llvm -B build -G "Visual Studio 17 2022" -Thost=x64 -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release
• 编译前确保 build 目录在 SSD 上,且剩余空间 ≥50GB
• 编译完别忘了手动把 build\Release\bin 加进系统 PATH
验证 clang 是否能编译 C++ 代码
写个最小测试:echo '#include <iostream> int main(){std::cout test.cpp</iostream>clang++ -std=c++17 test.cpp -o test.exe./test.exe
如果输出 ok,说明 clang 工具链完整可用。注意:
• Win11 默认链接 MSVCRT,不是 MinGW CRT,所以不要混用 -target x86_64-w64-mingw32 除非你明确需要 MinGW 环境
• 如果报 cannot open input file 'libcmt.lib',说明 VS 的库路径没被 clang 自动识别,此时加 --msvc-runtime=dynamic 或换用 clang-cl 模式
llvm-config 和 clang 虽然能运行,但某些项目(如 TVM、llama.cpp)会硬编码查找 llvm-config.exe 的绝对路径,或者依赖 LLVM_DIR 环境变量指向 CMake config 目录——这时候光有可执行文件不够,还得确认是否安装了配套的 CMake 支持文件(官方安装包默认包含,但 Chocolatey 可能不带)。











