windows下使用Ninja编译Clang

 工作中需要使用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.

    常见原因有:

    1. 没有安装任何 C/C++ 编译器(如 MSVC、Clang 或 MinGW-w64)。
    2. 虽然已经安装了编译器,但环境变量或路径未正确设置,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,或者换一个当前用户有权限的路径。
    ### 如何在 Windows编译和安装 LLVM Clang #### 准备工作 对于希望在 Windows 平台上从源码构建并安装 LLVM 和 Clang 的开发者来说,准备工作至关重要。确保已安装 Visual Studio 或 MinGW 工具链来提供必要的编译工具支持[^1]。 #### 下载源代码 通过 Git 或者直接下载压缩包的方式获取最新版本的 LLVM 及 Clang 源代码文件。官方推荐使用 Git 来克隆仓库以便于后续更新维护[^2]。 #### 创建构建目录 进入解压后的 `llvm-project` 文件夹,在此根路径下创建一个新的名为 `build` 的子文件夹用于存放生成的目标文件和其他中间产物: ```bash cd llvm-project mkdir build ``` #### 配置 CMake 构建选项 切换到新建立的 `build` 目录内执行 CMake 命令行指令完成项目初始化设置。针对 Windows 用户建议采用 Ninja 作为生成器,并指定 MSVC 编译器为默认C/C++处理器;同时关闭测试套件以减少不必要的依赖项加载时间: ```cmake cmake -G "Ninja" ^ -DLLVM_ENABLE_PROJECTS="clang" ^ -DLLVM_TARGETS_TO_BUILD="X86" ^ -DCMAKE_BUILD_TYPE=Release ^ -DLLVM_INCLUDE_TESTS=OFF .. ``` 注意:上述命令适用于命令提示符 (cmd),如果是 PowerShell,则需将反斜杠替换为回车键继续输入下一参数行[^3]。 #### 执行编译流程 利用多线程加速整个编译进程,假设计算机拥有四个逻辑核心则可以运行如下命令加快速度: ```powershell ninja -j4 ``` 等待所有模块成功链接完毕之后即可获得可执行程序及其库文件集合。 #### 安装至系统环境变量中 最后一步就是把刚刚制作好的二进制成果复制到合适的位置供全局调用。通常情况下会将其放置于 `%ProgramFiles%\LLVM\bin` 路径之下,并相应调整 PATH 环境变量使得可以在任意位置启动这些工具集。 ```batchfile setx /M PATH "%PATH%;%ProgramFiles%\LLVM\bin" ``` 以上就是在 Windows 上搭建基于 LLVM/Clang 开发平台的方法概述。
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值