【发布时间】:2019-11-12 15:04:17
【问题描述】:
这有点棘手......
我希望我的 Makefile 显示我的编译进度百分比。这很容易,只要我使用 tput 或转义序列移动光标来修改我的百分比。
但如果出现警告,则下一个警告将在前一个上,依此类推...
我该怎么做?
我已经找到了一些想法,比如将光标位置存储在变量中,但我失败了。 我考虑过将 gcc(或 clang 的 idc)输出重定向到一个变量,但它也失败了。
我可以使用echo -en "\033[6n" ; read -sdR CURPOS ; CURPOS=$${CURPOS#*[} ; echo "$${CURPOS}" 输出光标位置,但我不能使用$(shell ..),因为它只是无限循环(我猜)所以$(eval VAR = $(shell echo ..)) 是不可能的。
也许我看错了问题?
我真的被困住了,所以谢谢你的帮助
编辑:
224 all : $(TARGET)
225 if [[ ! '$(FILE_TODO)' == '0' ]]; then echo -e $(RPOS)$(ENDRASE)Done\n$(DEBUG_COLOR)[Linkage]$(NORMAL) - Done'; fi
226 $(ECHO) '$(DEBUG_MODE_MSG) : $(if $(ISXX),$(CXXFLAGS),$(CFLAGS))'
227
228 $(TARGET) : $(OBJFILES)
230 $(CC) $(OUTPUT_OPTION) $(LDFLAGS) $(LDLIBS) $(LINKAGE) $(if $(UNITARY),--coverage,) $^
231
232 display :
233 $(eval OBJ_NBR := $(shell if [[ -d '$(OBJDIR)' ]]; then find $(OBJDIR) -type f -name \*$(OBJEXT); fi))
234 $(eval OBJ_NBR := $(shell echo -n "$$(($(words $(OBJ_NBR))))"))
235 $(eval FILE_TODO := $(shell echo "$$(($(SRC_NBR)-$(OBJ_NBR)))"))
236 if [[ ! '$(FILE_TODO)' == '0' ]]; then echo -en '$(DEBUG_COLOR)[Compilation]$(NORMAL) - $(SPOS)'; fi
237
238 $(OBJDIR)/%$(OBJEXT) : %$(SRCEXT) | display
239 $(eval I := $(shell echo -n "$$(($(I)+1))"))
240 $(eval PERCENT := $(shell echo "$$((100*$(I)/$(FILE_TODO)))"))
241 $(ECHO) '$(RPOS)$(ENDRASE)$(PERCENT)% ($<)'
242 $(MKDIR) $(@D) $(patsubst $(OBJDIR)%,$(DEPDIR)%,$(@D))
243 $(CC) -c $(OUTPUT_OPTION) $(DEPFLAGS) $(if $(ISXX),$(CXXFLAGS),$(CFLAGS)) $(CPPFLAGS) $(WARNING) $(WNO) $(COMPILATION) $<
【问题讨论】:
-
如果您认为计算和显示准确的百分比并不难,这应该是轻而易举的事。百分之几?怎么显示?向我们展示您目前所拥有的。
-
欢迎来到 Stack Overflow。当编译器发出警告时,不清楚您希望此过程打印什么。
-
我不确定将百分比输出集成到 Makefile 中是正确的逻辑。考虑提供此功能的其他替代方案/构建系统
-
您打算如何衡量“百分比”。要编译的文件数量取决于修改的源文件数量?
-
问题中的逻辑是基于计数文件的。但是,make 通常会跳过重建最新对象(基于时间戳)。计算“.o”可能是非常不同的编译任务数量。对伪目标“显示”的额外依赖将禁用增量构建的(通常非常需要的)功能。另外,非交互式构建会发生什么?输出将变得难以阅读
标签: gcc makefile cursor-position