代码之家  ›  专栏  ›  技术社区  ›  Tim Angus

使用忍者建造系统,我可以清洁中间建造产品吗?

  •  3
  • Tim Angus  · 技术社区  · 7 年前

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   Tim Angus    7 年前

    用忍者按规则清洗是可能的,但要知道哪些规则生成中间产物,单用忍者是不可能的;相反,我们必须求助于shell脚本:

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

    这违反了规则。用于生成对象文件和静态库的规则的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
    )
    

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