主AOSP makefile会输出很多"包括文件......"线。我想稍微减少一点,只打印每10或100包括。
来自build/core/main.mk
的原始行:
$(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))
我想不经常打印包含...行。
答案 0 :(得分:0)
此代码使用shell和eval函数更新计数。然后它进行简单的模式匹配,查找以00结尾的任何数字。
define count_includes
$(eval INCLUDE_COUNT := $(shell echo "$$(( $(INCLUDE_COUNT) + 1 ))" ) ) \
$(if $(patsubst %00,,$(INCLUDE_COUNT)),,$(info $(INCLUDE_COUNT): including $(1) ...) )
endef
$(foreach mk, $(subdir_makefiles), $(call count_includes, $(mk))$(eval include $(mk)))
注意:我无需在上面初始化INCLUDE_COUNT
,因为它从空/未定义开始,$(( + 1 ))
评估为1
。
我使用原始代码运行了几个测试,此代码和所有打印都已删除。我的机器上的所有时间都在35秒内的1秒内。所以,没有真正的性能损失。
这是我用于测试的makefile:
define count_includes
$(eval INCLUDE_COUNT := $(shell echo "$$(( $(INCLUDE_COUNT) + 1 ))" ) ) \
$(if $(patsubst %00,,$(INCLUDE_COUNT)),,$(info $(INCLUDE_COUNT): including $(1) ...) )
endef
FILELIST := $(wildcard /usr/share/man/man1/*)
$(foreach mk, $(FILELIST), $(call count_includes, $(mk)))
.PHONY: all
all:
@echo "All done." $(INCLUDE_COUNT)
如果我希望模式匹配以外的时间间隔为0,我可能会使用shell命令输出当前计数和测试结果,然后拆分结果字符串。这只是为了避免另一个shell调用。