簡體   English   中英

使用GNU Make環境延遲Windows cmd回顯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM