0

我写得很简单Makefile来显示我遇到的问题。请看一下:

生成文件:

.PHONY: clean

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

使用命令运行此Makefile命令make clean不会将错误重定向rmdirNULL设备。有趣的是,从cmd.exe工作中运行相同的命令按预期工作,即它隐藏了错误。我的问题是为什么会这样?

make当我在以下版本中mingw使用http://www.mingw.org/时,此错误出现在 Windows 7 32 位版本上:

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

我将衷心感谢您的帮助。

4

1 回答 1

1

我无法再解释为什么这是有效的,但我遇到了同样的问题,我正在使用以下命令在 Makefiles 中真正安静的命令cmd

>nul 2>nul & verify >nul

为了使 Makefile 也与 兼容sh,定义变量可能是一个好主意,例如,我在 include 中使用它cmd

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

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

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)
于 2015-09-09T17:23:22.043 回答