我写了非常简单的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
我真的很感谢你的帮助。
答案 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)