将错误从rmdir / S / Q重定向到NULL设备不起作用

时间:2015-09-09 17:08:06

标签: windows makefile mingw rmdir

我写了非常简单的Makefile来表示我得到的问题。请看一下:

生成文件:

.PHONY: clean

clean:
    -rmdir /S /Q not_existing_directory >nul 2>&1

使用命令Makefile运行此make clean并不会将错误从rmdir重定向到NULL设备。有趣的是,从cmd.exe运行相同的命令可以正常工作,即隐藏错误。我的问题是它为什么会发生?

此错误在Windows 7 32位版本上显示为make我在以下版本中使用http://www.mingw.org/中的mingw

GNU Make 3.82.90
Built for i686-pc-mingw32

以下是我通过批处理文件设置的环境变量:

setenv.bat:

set PATH=C:\Windows\system32;C:\Program Files\COSMIC\CXSTM8;C:\MinGW\bin;C:\Program Files\Vim

%comspec% /k PATH

我真的很感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我无法解释为什么这样做有效,但我遇到了同样的问题,并且我使用以下内容在Makefile中使用cmd真正安静的命令:

>nul 2>nul & verify >nul

为了使Makefile与sh保持兼容,定义变量可能是个好主意,我在cmd的包含中使用它:

CMDSEP := &
PSEP := \\
CPF := copy /y
RMF := del /f /q
RMFR := -rd /s /q
MDP := -md
CMDQUIET := >nul 2>nul & verify >nul

以下部分适用于bash和其他sh兼容的shell:

CMDSEP := ;
PSEP := /
CPF := cp -f
RMF := rm -f
RMFR := rm -fr
MDP := mkdir -p
CMDQUIET := >/dev/null 2>&1

示例用法:

distclean: clean
    $(RMF) conf.mk
    $(RMFR) $(SDKDIR) $(CMDQUIET)
    $(RMFR) $(OUTDIR) $(CMDQUIET)