使用GNU Make环境延迟Windows cmd回显

时间:2015-08-25 13:47:46

标签: windows command-line makefile gnu-make

我有几个简单的目标可以为我创建一些文件。 例如:

[^0-9]

目标工作正常,正在创建文件并显示echo文本,但按此顺序(首先构建文件,然后在cmd.exe控制台上显示echo)。

我猜这与输出缓冲有某种关系,但我无法立即找到冲洗回声的方法。

任何提示?它甚至可能吗?

我正在使用Gnu Make 4.0

1 个答案:

答案 0 :(得分:1)

你在这里混淆了上下文。

第一个@echo行是一个配方行,当目标运行时由shell运行。

第二行$(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内置的单个调用输出到文件而不是运行{{1} }调用N

修改:对于Windows echo compat,您需要使用cmd.exe作为echo $i >> $@ &正文,以便$(foreach)正确运行多个命令。

如果您确实希望保留cmd.exe回音,则可以使用:

N

其中$(MAKE_INA): @echo Building ASM compilation flags file $(notdir $(MAKE_INA)) @$(foreach i, $(sort $(ASMFLAGS) $(PFLAGS) $(ALL_INC_DIR) $(cppGetPreProcessorDefines)), echo $i >> $@; )) 输出 $(foreach)作为配方行,然后在配方执行期间执行。