我有一个这样的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.
所以我想我想要某种类型的计数器,但是我不知道如何针对错误设置/递增它。有什么想法吗?
答案 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."
请注意,第一个输出重定向必须为单个>
才能覆盖文件中先前的返回码,而所有其他重定向都应为两个>
才能覆盖文件内容。