ninja编译

1.ninja命令安装:

项目中执行~/KXXXAA1/android/:

mkdir -p ~/bin ~/lib64
cp prebuilts/build-tools/linux-x86/bin/ninja ~/bin/
cp prebuilts/build-tools/linux-x86/lib64/libc++.so ~/lib64/
cp prebuilts/build-tools/linux-x86/lib64/libjemalloc.so ~/lib64/

bashrc文件最后增加命令findm:
alias findm="grep -rnws --include='*.[mb][kp]' 'LOCAL_MODULE\|LOCAL_PACKAGE_NAME\|name:'"
(非必须)

2.编译命令:
ninja -f out/combined-KXXXAA1.ninja services
生成:
[34/34] Copy: out/target/product/KXXXAA1/system/framework/oat/arm64/services.odex

ninja -f out/combined-KXXXAA1.ninja framework
生成:
[1891/1891] Copy: out/target/product/KXXXAA1/system/framework/arm64/boot.art

3.替换jar包
以编译services为例
adb remount
adb push services.jar /system/framework/services.jar
adb push services.jar.prof /system/framework/services.jar.prof
adb push services.vdex /system/framework/oat/arm64/services.vdex
adb push services.odex /system/framework/oat/arm64/services.odex
adb push services.art /system/framework/oat/arm64/services.art
adb reboot

adb push Z:\KXXXAA1\android\out\target\product\KXXXAA1\system\framework /system/
adb reboot

<think>我们正在讨论Ninja构建系统。用户想要获取关于Ninja构建系统的编译指令或使用方法的教程。 根据之前的对话,我们可能已经提供了一些信息,但用户现在需要更具体的教程。 注意:用户提到了“compile commands”,这可能指的是如何获取编译命令(例如,用于工具如clangd)或者如何编写Ninja构建文件。 由于Ninja是一个底层构建系统,通常由更高级的生成器(如CMake、GN)生成build.ninja文件,因此直接使用Ninja编写构建文件的情况较少。但用户要求教程,所以我们应该涵盖: 1. 如何安装Ninja 2. 基本命令(如`ninja`、`ninja -t`等) 3. 如何编写简单的build.ninja文件(规则、构建语句) 4. 如何生成编译命令数据库(compile_commands.json)以便工具使用 同时,我们注意到之前有引用关于CMake设置输出路径的例子,但用户现在的问题是关于Ninja的。因此,我们可能需要解释Ninja与CMake的关系:CMake可以生成Ninja构建文件,然后使用Ninja构建。 我们分步骤回答: 1. 安装Ninja 2. 基本使用(当有build.ninja文件时) 3. 编写简单的build.ninja文件(可选,因为通常由生成器生成) 4. 生成编译命令数据库(对于IDE工具很重要) 注意:用户可能真正需要的是如何在使用CMake生成Ninja构建文件后,获取编译命令数据库(compile_commands.json)。因为很多用户使用Ninja是为了快速构建,同时需要兼容IDE工具。 因此,我们重点可以放在: - 使用CMake生成Ninja构建文件时,如何同时生成compile_commands.json - 或者,使用Ninja自带的工具导出编译命令(但注意,Ninja本身不直接支持生成compile_commands.json,需要借助其他工具) 但是,根据CMake的文档,我们可以通过设置CMAKE_EXPORT_COMPILE_COMMANDS来生成。 步骤: 1. 在CMake配置时添加`-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 2. 使用CMake生成Ninja构建文件 3. 构建,同时会生成compile_commands.json 另外,也可以直接使用Ninja构建,然后使用工具(如Bear)拦截编译命令生成compile_commands.json,但这需要额外的工具。 我们首先回答基本使用,然后重点回答如何生成编译命令数据库。 由于用户要求教程,我们提供清晰的步骤。 注意:如果用户希望直接编写Ninja构建文件,我们也提供简单示例。</think>### Ninja构建系统教程 Ninja是一个专注于速度的轻量级构建系统,通常作为CMake、Meson等高级构建系统的后端使用。以下是关键使用方法和编译指令: #### 1. 安装Ninja - **Linux**:`sudo apt install ninja-build` (Debian/Ubuntu) - **macOS**:`brew install ninja` - **Windows**:通过Chocolatey `choco install ninja` #### 2. 基本使用流程 ```bash # 1. 生成构建文件 (以CMake为例) cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release # 2. 执行构建 cd build && ninja # 3. 清理构建 ninja -t clean ``` #### 3. 常用命令 | 命令 | 功能 | |------|------| | `ninja` | 执行默认构建 | | `ninja target` | 构建指定目标 | | `ninja -j N` | 设置并行编译线程数 | | `ninja -t commands` | 查看所有构建命令 | | `ninja -t graph` | 生成构建依赖图 | #### 4. 编译指令获取方法 要获取实际编译命令(如用于IDE工具): ```bash # 方法1:通过CMake生成compile_commands.json cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -B build # 方法2:直接查看Ninja规则 ninja -t commands target_name ``` #### 5. 简单Ninja文件示例 ```ninja # build.ninja cxx = clang++ cflags = -Wall -O2 rule compile command = $cxx $cflags -c $in -o $out rule link command = $cxx $in -o $out build main.o: compile main.cpp build app: link main.o ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值