ninja的简单使用

文章介绍了在Windows和Linux环境下安装Ninja构建工具的方法,包括源码编译、下载二进制包和利用VisualStudio。在Windows中,推荐使用VS2019的C++CMake工具组件。与CMake结合使用时,通过编写CMakeLists.txt文件来构建项目。文章还提到了调试和生成不同配置的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ninja安装

windows环境

问题的解决通常有多种方法。按照结果的好坏程度,可以将解决方法简单的划分为,上中下三个层次,见:为什么谋士总喜欢提上中下三策?

在windows上安装Ninja, 这里也给出上中下三策。

下策:源码编译。大多数人使用Ninja都不是为了修改它的源码,而是将其作为工具使用。所以,有二进制包,优先使用二进制文件,避免源码编译,编译安装可见:【ninja】Windows下安装ninja环境

中策:直接从下载二进制包。但是,Ninja这个构建工具,它还依赖rc.exe这样的程序,需要链接kernel32.lib这样的库。在windows powershell使用cmake -G Ninja是可能报错的,比如:Ninja-无法找到rc.exeNinja-无法链接kernel32.lib。因为一些程序和库的路径,不在系统的环境变量PATH中。而,在Developer PowerShell for VS2019中进行编译则没有问题,因为它已经在PATH中添加了路径,可以通过$env:path查看。二进制包安装可见:How to install ninja-build for C++

上策:不用下载。我看了下我安装的VS2019环境中,在安装组件中,将"用于Windows的C++ CMake工具"勾选安装上后,会安装cmake和Ninja。之后,在Developer PowerShell for VS2019中进行编译程序,顺顺利利。

在这里插入图片描述

Linux环境

# ubuntu
sudo apt install ninja-build

入门使用

与CMake一起使用

参考: CMake基础 第10节 使用ninja构建Difference between invoking ninja directly vs through cmake --build

  • 测试ninja代码。

    │  CMakeLists.txt
    │  main.cpp
    
    cmake_minimum_required(VERSION 3.1)
    project(hello_ninja)
    add_executable(${PROJECT_NAME} main.cpp)
    
    #include <iostream>
    int main(int argc, char *argv[]) { std::cout << "hello world" << std::endl; }
    
  • 编译整个项目

    mkdir build && cd build 
    cmake -G Ninja ..
    ninja
    
  • 更进一步,我们可以看下生成的*.ninja文件。

    ninja文件的相关语法可以参考:Writing your own Ninja files。我没有看这个文档,因为没有必要手写ninja文件。看起来和Makefile类似。执行ninja help可以看到可以生成的目标。

    ninja.exe help
    [0/1] Re-running CMake...-- Configuring done
    -- Generating done
    -- Build files have been written to: 06-ninja-use/build
    
    [1/1] All primary targets available:
    edit_cache: phony
    rebuild_cache: phony
    hello_ninja: phony
    all: phony
    build.ninja: RERUN_CMAKE
    clean: CLEAN
    help: HELP
    
  • 编译的时候添加更多的参数

    # windows上默认生成的是Debug版本,生成Relase版本
    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release
    
    # 默认生成的是64位的版本,挺好;把32位的扔到垃圾桶里去
    dumpbin /headers .\hello_ninja.exe
    
  • 如果需要调试项目。在windows下,直接用vs打开编译生成的可执行文件,即可进行调试。

<think>我们正在讨论如何使用Ninja构建系统。根据用户提供的引用和之前的历史回答,我们知道Ninja是一个专注于速度的构建系统,通常与CMake等构建生成器配合使用。用户现在明确要求一个"Ninja构建系统使用教程"。 根据引用[4]:"Ninja 的定位:特点说明构建工具只负责构建执行,不负责生成构建规则(如依赖关系)... 不适合手写构建文件,需要由 CMake、Meson、GN 等工具生成 .ninja 文件"。因此,教程的核心应该是如何生成.ninja文件以及如何使用Ninja执行构建。 另外,引用[1]提到Ninja的可执行文件位置,引用[2]说明Ninja处理依赖关系,引用[3]提到.ninja文件是普通文本文件,但通常不推荐手写。 结合历史回答中已经介绍的步骤,我们可以整理一个更基础的Ninja使用教程,重点放在Ninja本身的操作上(包括如何安装、基本命令等),同时说明如何与CMake配合。 教程结构: 1. 安装Ninja 2. 生成构建文件(重点说明通过CMake生成) 3. 使用Ninja构建项目 4. 常用Ninja命令 5. 高级用法(如清理、目标指定等) 注意:用户可能没有CMake项目,所以我们也需要说明在没有CMake的情况下如何手动编写简单的.ninja文件(虽然不推荐,但为了理解Ninja的工作原理)。 同时,根据引用[5],我们可以给出安装Ninja的具体步骤(从源码编译安装)。 但是,用户提供的引用[5]只给出了克隆仓库和进入目录,没有后续步骤。因此,我们需要补充完整的安装步骤(包括编译和安装)。 另外,根据引用[3],我们可以提到.ninja文件的格式,但强调通常由生成器产生。 下面开始组织回答:</think>### Ninja构建系统使用教程 Ninja是一个专注于**极致构建速度**的轻量级构建工具,通过与CMake等生成器配合使用,可显著提升C/C++项目的构建效率。以下是完整使用教程: --- #### 一、安装与配置 1. **安装Ninja**(参考[^5]): ```bash # Linux/macOS sudo apt install ninja-build # Debian/Ubuntu brew install ninja # macOS # Windows choco install ninja # Chocolatey # 或从官网下载二进制:https://github.com/ninja-build/ninja/releases ``` 2. **验证安装**: ```bash ninja --version # 应输出类似 1.11.1 ``` --- #### 二、基础使用流程 1. **生成构建文件**(需CMake项目): ```bash # 在项目根目录执行 cmake -B build -G Ninja # 生成Ninja构建文件[^4] ``` - 生成关键文件:`build/build.ninja`(构建规则)、`build/rules.ninja`(编译规则) 2. **执行构建**: ```bash cd build ninja # 启动并行构建[^1] ``` - **自动并行化**:Ninja默认使用所有CPU核心 - **输出示例**: ``` [1/10] Building CXX object src/main.cpp.o [10/10] Linking target myapp ``` --- #### 三、核心功能详解 1. **常用命令**: ```bash ninja -j 4 # 限制并行任务数为4 ninja clean # 清理构建产物 ninja -t graph # 生成构建依赖图(需Graphviz) ninja -v # 显示详细命令(调试用)[^3] ``` 2. **目标指定**: ```bash ninja my_target # 仅构建指定目标 ninja all # 构建所有目标(默认) ``` 3. **增量构建**: - Ninja自动检测文件变更,仅重建受影响目标 - 依赖关系由CMake生成在`build.ninja`中[^2] --- #### 四、手动编写.ninja文件(进阶) 虽然推荐用CMake生成,但简单项目可手写: ```ninja # build.ninja 示例[^3] rule cxx command = g++ -c $in -o $out # 编译规则 rule link command = g++ $in -o $out # 链接规则 build main.o: cxx main.cpp # 依赖关系 build app: link main.o # 目标定义 ``` 执行构建: ```bash ninja -f build.ninja # 指定构建文件 ``` --- #### 五、调试与优化 1. **依赖分析**: ```bash ninja -t deps | less # 查看依赖关系 ``` 2. **性能分析**: ```bash ninja -t commands > build.log # 导出所有命令 ``` 3. **常见问题**: - **依赖错误**:使用`ninja -t recompact`重建依赖 - **并行冲突**:添加`-j1`单线程运行排查 --- #### 六、与其他工具对比 | **特性** | Ninja | Make | |----------------|---------------|------------| | 构建速度 | ⚡ 极快 | 中等 | | 规则生成 | 需外部生成器 | 内置 | | 语法复杂度 | 极简 | 复杂 | | 并行处理 | 自动优化 | 需手动指定 | | 适用场景 | 大型项目 | 小型项目 | > 引用说明:Ninja设计目标是**极致速度**,通过减少决策逻辑实现高效构建[^2][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

da1234cao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值