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

时间:2017-11-13 17:18:58

标签: c++ c cmake ninja

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

1 个答案:

答案 0 :(得分:1)

可以通过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
)

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