[英]Delayed Windows cmd echo with GNU Make environment
我有幾個簡單的目標可以為我創建一些文件。 例:
$(MAKE_INA):
@echo Building ASM compilation flags file $(notdir $(MAKE_INA))
@$(foreach i, $(sort $(ASMFLAGS) $(PFLAGS) $(ALL_INC_DIR) $(cppGetPreProcessorDefines)), $(shell echo $i >> $@ ))
目標工作正常,正在創建文件並顯示回顯文本,但按此順序進行(首先構建文件,然后在cmd.exe控制台上顯示回顯)。
我想這與輸出緩沖有某種關系,但我無法找到立即刷新回聲的方法。
有什么提示嗎? 可能嗎?
我正在使用Gnu Make 4.0
您在這里混淆上下文。
第一行@echo
行是配方行,在目標運行時由外殼運行。
第二條$(foreach)
行在規則內,但是make上下文行, 在運行配方行之前由make評估。 在該行中$(shell)
也是一個make命令,它在配方的make擴展期間運行,而不是在配方執行時由shell運行。
要執行您想要的操作,您可以使用:
$(MAKE_INA):
@echo Building ASM compilation flags file $(notdir $(MAKE_INA))
@printf "%s\\n" $(sort $(ASMFLAGS) $(PFLAGS) $(ALL_INC_DIR) $(cppGetPreProcessorDefines)) >> $@
哪個在配方執行時執行echo
(因此具有正確的順序),並使用對內置內置printf
的單個調用輸出到文件,而不是運行N
調用echo
。
編輯:對於Windows cmd.exe
兼容,您需要使用echo $i >> $@ &
作為$(foreach)
主體,以便cmd.exe
正確運行多個命令。
如果您確實想保留N
echo調用,則可以使用:
$(MAKE_INA):
@echo Building ASM compilation flags file $(notdir $(MAKE_INA))
@$(foreach i, $(sort $(ASMFLAGS) $(PFLAGS) $(ALL_INC_DIR) $(cppGetPreProcessorDefines)), echo $i >> $@; ))
里面有$(foreach)
輸出 echo XXX >> $@; ....; echo ZZZ >> $@;
echo XXX >> $@; ....; echo ZZZ >> $@;
作為要在配方執行期間執行的配方行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.