Make/makefile进度指示! [英] Make/makefile progress indication!
本文介绍了Make/makefile进度指示!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
看看这个makefile,它具有某种原始进度指示(可能是进度条).
请给我建议/评论!
# BUILD is initially undefined
ifndef BUILD
# max equals 256 x's
sixteen := x x x x x x x x x x x x x x x x
MAX := $(foreach x,$(sixteen),$(sixteen))
# T estimates how many targets we are building by replacing BUILD with a special string
T := $(shell $(MAKE) -nrRf $(firstword $(MAKEFILE_LIST)) $(MAKECMDGOALS) \
BUILD="COUNTTHIS" | grep -c "COUNTTHIS")
# N is the number of pending targets in base 1, well in fact, base x :-)
N := $(wordlist 1,$T,$(MAX))
# auto-decrementing counter that returns the number of pending targets in base 10
counter = $(words $N)$(eval N := $(wordlist 2,$(words $N),$N))
# BUILD is now defined to show the progress, this also avoids redefining T in loop
BUILD = @echo $(counter) of $(T)
endif
# dummy phony targets
.PHONY: all clean
all: target
@echo done
clean:
@rm -f target *.c
# dummy build rules
target: a.c b.c c.c d.c e.c f.c g.c
@touch $@
$(BUILD)
%.c:
@touch $@
$(BUILD)
欢迎所有建议!
推荐答案
这不那么麻烦,但功能更强大.
This one is less intrusive and more awesome.
ifneq ($(words $(MAKECMDGOALS)),1)
.DEFAULT_GOAL = all
%:
@$(MAKE) $@ --no-print-directory -rRf $(firstword $(MAKEFILE_LIST))
else
ifndef ECHO
T := $(shell $(MAKE) $(MAKECMDGOALS) --no-print-directory \
-nrRf $(firstword $(MAKEFILE_LIST)) \
ECHO="COUNTTHIS" | grep -c "COUNTTHIS")
N := x
C = $(words $N)$(eval N := x $N)
ECHO = echo "`expr " [\`expr $C '*' 100 / $T\`" : '.*\(....\)$$'`%]"
endif
.PHONY: all clean
all: target
@$(ECHO) All done
clean:
@rm -f target *.c
# @$(ECHO) Clean done
target: a.c b.c c.c d.c e.c
@$(ECHO) Linking $@
@sleep 0.1
@touch $@
%.c:
@$(ECHO) Compiling $@
@sleep 0.1
@touch $@
endif
这篇关于Make/makefile进度指示!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文