工作中需要使用Clang编译C++项目,因此选择从源码构建Clang,并使用Ninja加速编译过程.
操作过程:
1.安装CMake
2.安装Ninja
3.在git仓库拉取LLVM源码
4.编译LLVM代码
1.安装CMake
在CMake官网下载需要的版本:Download CMake,安装到自定义目录。
2.安装Ninja
如果是windows用户可以直接下载对应的可执行程序。下载地址:Releases · ninja-build/ninja

下载后加压放到自己喜欢的目录,并设置系统环境变量,方便在命令行中使用

设置环境变量

3.在git仓库拉取LLVM源码
# 拉取 llvm-project 仓库
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
# 查看分支列表(例如要切到某个 release 分支,我这边下载的是 release/19.x)
git branch -r
# 检出代码
git checkout release/16.x
4.编译LLVM代码
4.1准备构建目录
LLVM 官方推荐 在源码目录外单独创建一个构建文件夹,这种 “Out-of-Source Build” 可以避免污染源码目录,并且多次构建/清理也方便。
例如,在当前 llvm-project 目录下,创建一个 build 文件夹:
cd llvm-project
mkdir build
cd build
目录结构
llvm-project
├── clang
├── clang-tools-extra
├── compiler-rt
├── libcxx
├── lld
├── lldb
├── llvm
├── ...
└── build <-- 我们在这里进行编译
4.2CMake配置
在build目录中使用CMake配置生成Ninja项目。
cmake -G Ninja ../llvm \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lldb;..." \
-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;..." \
-DCMAKE_INSTALL_PREFIX="安装路径" \
[其他选项...]
CMake选项说明:
-G Ninja
指定生成 Ninja 构建文件。
../llvm或../llvm-project/llvm
指向 LLVM 的CMakeLists.txt所在目录。
- 如果是单独下载的
llvm-xx.src源码包,根目录下就有 CMakeLists.txt,所以..就是它的路径。- 如果是从
llvm-project仓库克隆,则 llvm 的顶级 CMake 脚本位于llvm-project/llvm目录中,你需要指定到这个目录。
-DCMAKE_BUILD_TYPE=Release
指定编译类型,可选Release,Debug,RelWithDebInfo,MinSizeRel等。在 Windows + MSVC 环境下,如果用多配置生成器(如 Visual Studio 项目文件),可以省略这个选项,但对 Ninja 单配置生成器则需要显式指定。
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;..."
告诉 LLVM CMake 哪些子项目需要一起构建,比如 Clang、lld、lldb、compiler-rt、libcxx 等。用分号分隔。若只想要纯 LLVM Core,可以不启用。
-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;..."
指定要编译的目标后端(后端越多,编译时间越长)。常见只想编译 x86_64,可以设成X86;如果要多架构,可以再加上ARM,AArch64等等。
- 默认会编译 “all” 或者
X86;AMDGPU;ARM;...多个后端。
-DCMAKE_INSTALL_PREFIX="..."
指定安装路径。将来你ninja install时,会把编译好的文件放到这个路径下(例如/usr/local,或者 Windows 下的C:\Program Files\LLVM等)。如果不指定,默认安装到系统目录(Linux 通常是/usr/local),但在 Windows 上可能会安装到Program Files下,需要管理员权限。其他常见选项:
-DLLVM_ENABLE_ASSERTIONS=ON
默认在 Release 模式下关闭断言。若你想要 Release + Assertions,可以开启它。-DLLVM_ENABLE_EH=ON/-DLLVM_ENABLE_RTTI=ON
是否启用 C++ 异常和 RTTI(部分情况下可能需要)。-DLLVM_BUILD_TESTS=ON/-DLLVM_ENABLE_DOXYGEN=ON/-DLLVM_INCLUDE_DOCS=ON等
启用测试和文档构建等。
4.3执行编译操作
注意:该CMake指令直接在命令行中执行,会提示以下错误
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld;compiler-rt" -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_INSTALL_PREFIX="D://llvm" ../llvm CMake Deprecation Warning at F:/code/llvm-project/cmake/Modules/CMakePolicy.cmake:6 (cmake_policy): The OLD behavior for policy CMP0116 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack (most recent call first): CMakeLists.txt:8 (include) -- The C compiler identification is unknown -- The CXX compiler identification is unknown -- The ASM compiler identification is unknown -- Didn't find assembler CMake Error at CMakeLists.txt:47 (project): No CMAKE_C_COMPILER could be found. Tell CMake where to find the compiler by setting either the environment variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH. CMake Error at CMakeLists.txt:47 (project): No CMAKE_CXX_COMPILER could be found. Tell CMake where to find the compiler by setting either the environment variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH. CMake Error at CMakeLists.txt:47 (project): No CMAKE_ASM_COMPILER could be found. Tell CMake where to find the compiler by setting either the environment variable "ASM" or the CMake cache entry CMAKE_ASM_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH. -- Warning: Did not find file Compiler/-ASM -- Configuring incomplete, errors occurred!
在 Windows 上,如果没有正确安装或配置编译器,CMake 无法找到有效的 C/C++ 编译器,就会出现类似错误:
No CMAKE_C_COMPILER could be found.
常见原因有:
- 没有安装任何 C/C++ 编译器(如 MSVC、Clang 或 MinGW-w64)。
- 虽然已经安装了编译器,但环境变量或路径未正确设置,CMake 在当前环境下找不到编译器执行文件。
解决方案
打开“开始”菜单,在搜索框搜索“x64 Native Tools Command Prompt for VS 20xx”或“Developer Command Prompt for VS 20xx”。

进入工具命令行

切换至llvm-project代码目录下的build目录
cd llvm-project
mkdir build
cd build
执行以下编译指令,等待CMake配置完成。
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_INSTALL_PREFIX="D://llvm" ..\llvm
在完成上述 CMake 配置后,就可以用 Ninja 编译了:
ninja
- Ninja 会自动识别所有依赖并进行并行编译。
- 默认使用 CPU 核心数进行并行。
- 若想手动指定并行线程数,可以使用
-j选项,如ninja -j8。
执行安装操作
ninja install
- Ninja 会把 LLVM、clang 等二进制文件(如
clang.exe/clang++/clang)安装到CMAKE_INSTALL_PREFIX/bin下,库文件(如libLLVM.so或.lib)安装到CMAKE_INSTALL_PREFIX/lib等目录,头文件安装到CMAKE_INSTALL_PREFIX/include下。- 如果没有管理员权限,又想安装到系统目录(如
/usr/local)则会失败,可考虑用sudo ninja install,或者换一个当前用户有权限的路径。
2256

被折叠的 条评论
为什么被折叠?



