使用 Ninja 构建系统,我可以清理中间构建产品吗?

Posted

技术标签:

【中文标题】使用 Ninja 构建系统,我可以清理中间构建产品吗?【英文标题】:Using the Ninja build system, can I clean intermediate build products? 【发布时间】:2017-11-13 17:18:57 【问题描述】:

当我使用 CMake 生成树外 Ninja 构建时,能够删除中间构建产品(即目标文件和静态库)将很有用,以节省我们 CI 服务器上的磁盘空间。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

使用 Ninja 可以按规则进行清理,但仅靠 Ninja 无法知道哪些规则生成中间体;相反,我们必须求助于 shell 脚本:

grep "^rule.*\(_COMPILER_\|_STATIC_LIBRARY_\)" rules.ninja | \
    cut -d' ' -f2 | xargs -n1 ninja -t clean -r

这会为那些生成目标文件和静态库的规则获取 rules.ninja 文件,然后在每个规则上调用 ninja -t clean -r <rule> 以进行实际清理。 Windows 上的等效功能通过以下方式实现:

FOR /f "tokens=2" %%R IN ('findstr "_COMPILER_ _STATIC_LIBRARY_" rules.ninja') DO (
    ninja -t clean -r %%~R
)

这肯定是一个 hack,但它为我们节省了大量的磁盘空间,所以值得记录,我想。

【讨论】:

以上是关于使用 Ninja 构建系统,我可以清理中间构建产品吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 qtcreator 通过 ninja 构建系统远程部署应用程序

VS2013中使用ninja构建WebRTC并调试

Android Oreo 全新构建系统(宋/忍者)

Meson 和 NInja 构建系统:指定二进制文件的存储位置

Linux From Scratch(LFS11.0)构建 LFS 系统 - Ninja-1.10.2

Ninja 构建中的 CMake 命令行参数