Windows下编译Bloomberg clang-p2996分支的最简构建方法及相关问题求助
Windows下编译Bloomberg clang-p2996分支的最简构建方法及相关问题求助
嘿,我来帮你搞定Windows上编译Bloomberg clang-p2996分支的问题,顺便把你踩过的坑都填上,给你最省心的构建步骤:
先解决你遇到的现有问题
- MSVC编译找不到atlbase.h:这是因为ATL是Visual Studio的可选组件,你需要打开Visual Studio Installer,找到已安装的VS2022,点击“修改”,在“桌面开发C++”工作负载里勾选“ATL支持”,然后点击“修改”安装即可。
- CLion用MinGW编译后找不到LLVM config文件:MinGW的构建体系和LLVM官方推荐的MSVC体系差异较大,很容易出现依赖识别问题,建议直接放弃MinGW,改用MSVC+Ninja的组合,这也是官方最稳定的构建方式。
最简构建步骤(MSVC+Ninja)
前置准备
- 安装Visual Studio 2022:必须勾选“桌面开发C++”工作负载,同时要选上“ATL支持”、“C++ CMake工具”、“Ninja构建工具”这几个可选组件。
- 安装Git:用来拉取代码。
- 确保CMake是最新版:可以通过Visual Studio的组件安装,也可以单独下载安装。
具体操作
拉取代码
打开Git Bash或者VS的开发者命令提示符,执行:git clone --branch clang-p2996 https://github.com/bloomberg/clang-p2996.git llvm-project
(克隆后的目录命名为llvm-project,方便后续CMake识别)创建目录
在你喜欢的磁盘(比如D盘)创建两个文件夹:
D:\llvm-build:用来存放构建过程中的临时文件D:\llvm-install:用来存放最终编译好的可执行文件和库
- 配置CMake(关键!必须用VS开发者命令提示符)
打开“x64 Native Tools Command Prompt for VS 2022”,切换到你存放llvm-project的目录上级,执行以下命令:
cmake -G Ninja -S ./llvm-project/llvm -B ./llvm-build -DCMAKE_INSTALL_PREFIX=./llvm-install -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release
我给你解释下每个参数的作用:
-G Ninja:指定使用Ninja构建工具,比VS的MSBuild更快-S ./llvm-project/llvm:指定源码的根目录(整个llvm-project的主CMakeLists.txt在llvm文件夹里)-B ./llvm-build:指定构建目录-DCMAKE_INSTALL_PREFIX=./llvm-install:指定编译完成后产物的安装路径-DLLVM_ENABLE_PROJECTS=clang:只构建clang和它依赖的LLVM核心组件,大幅减少编译时间-DCMAKE_BUILD_TYPE=Release:编译Release版本,运行速度更快,适合日常使用
开始编译并安装
在同一个命令提示符里执行:cmake --build ./llvm-build --target install
这个过程会比较久,根据你的电脑配置,大概1-2小时,耐心等就行,中间不要中断。验证构建结果
打开D:\llvm-install\bin文件夹,找到clang.exe,在命令提示符里执行:D:\llvm-install\bin\clang --version
如果能正常输出clang的版本信息,说明构建成功了!
关于你对官方文档参数的困惑
你看到的官方文档里的那些参数,其实是给单独构建子项目用的,而我们上面用的是一体化构建(整个llvm-project一起构建),所以大部分参数都不需要:
LLVM_EXTERNAL_LIT:用来指定lit测试工具的路径,如果你不需要运行clang的测试用例,完全可以忽略这个参数LLVM_ROOT:只有当你已经提前编译好LLVM,现在要单独编译clang子项目时,才需要指定这个路径指向已安装的LLVM目录- 一体化构建是官方推荐的最简方式,CMake会自动处理所有依赖,不需要手动指定这些参数
其他注意事项
- 千万不要用MinGW构建,LLVM官方对MSVC的支持最完善,MinGW构建容易出现各种奇怪的依赖问题
- 必须使用VS的开发者命令提示符,普通的cmd或PowerShell没有加载MSVC的环境变量,会导致编译失败
- 如果编译时出现内存不足的错误,可以在CMake配置命令里加一个参数:
-DLLVM_PARALLEL_LINK_JOBS=1,减少链接时的并行任务数,避免内存溢出
如果在构建过程中遇到具体的错误,比如某个文件找不到、编译报错等,把错误信息贴出来,我再帮你排查!




