计数器,将问题/失败的总数加起来作为最后的摘要

时间:2018-07-16 07:09:50

标签: linux gcc makefile gnu

我有一个这样的makefile:

default:
%:
    @$(MAKE) -i -C subdir1 $*
    @$(MAKE) -i -C subdir2 $*
    @$(MAKE) -i -C subdir3 $*
    @$(MAKE) -i -C subdir4 $*
    @$(MAKE) -i -C subdir5 $*

基本概念是我有5个(或更多)子项目,我将依次调用make。我使用“ -i”标志使make可以继续到结尾,并使用“ -C dir”标志在子目录中调用make。

所以,可以说子项目2和5失败了,那么最后我希望能够打印类似的内容:

3 projects built ok, 2 projects have errors.

所以我想我想要某种类型的计数器,但是我不知道如何针对错误设置/递增它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

每次对$(MAKE)的调用都产生其自己的子流程时,我想不出一种使用普通make变量轻松记录这些数字的方法。但是,您可以将每次调用的返回值记录到一个(可能是隐藏的)文件中,然后将grep记录为构建状态,如下所示:

errLog = .errLog

default:
%:
    @$(MAKE) -i -C subdir1 $*; echo $$? > $(errLog)
    @$(MAKE) -i -C subdir2 $*; echo $$? >> $(errLog)
    @$(MAKE) -i -C subdir3 $*; echo $$? >> $(errLog)
    @$(MAKE) -i -C subdir4 $*; echo $$? >> $(errLog)
    @$(MAKE) -i -C subdir5 $*; echo $$? >> $(errLog)
    @echo "`grep -c '^0' $(errLog)` built ok, `grep -c '^[^0]' $(errLog)` have errors."

请注意,第一个输出重定向必须为单个>才能覆盖文件中先前的返回码,而所有其他重定向都应为两个>才能覆盖文件内容。