为什么Makefile中的clean规则不生效?Windows MinGW+PowerShell环境
问题修复方案
1. 修复clean规则报错
错误原因
mingw32-make默认调用Windows原生的cmd.exe执行规则内的命令,而非你当前使用的PowerShell。rm是PowerShell内置的Remove-Item别名,cmd.exe完全无法识别该命令,因此会抛出「系统找不到指定文件」的错误。
可选解决方法
方案1:改用cmd原生删除命令(最简便,无需改配置)
将clean规则修改为:clean: if exist hello.exe del /q hello.exe其中
/q参数是静默删除不弹窗,if exist判断是避免文件不存在时del抛出错误。方案2:指定make调用PowerShell执行命令
在Makefile最开头添加以下两行配置,即可直接使用PowerShell命令:SHELL := powershell.exe SHELLFLAGS := -NoProfile -Command此时clean规则可以写为:
clean: Remove-Item -Force hello.exe -ErrorAction SilentlyContinue方案3:添加MSYS工具链到环境变量
把C:\MinGW\msys\1.0\bin路径添加到系统环境变量PATH中,该目录下有原生Windows编译的GNUrm.exe工具,添加后重启终端,原有rm hello.exe的写法即可正常运行。
2. 直接使用make命令的方法
有两种常用实现方式:
- 进入
C:\MinGW\bin目录,找到mingw32-make.exe,复制一份并重命名为make.exe,重启终端即可直接调用make命令。 - 把
C:\MinGW\msys\1.0\bin添加到系统环境变量PATH,该目录下自带make.exe,添加后重启终端就能直接用make命令。
3. C:\MinGW\msys\1.0\bin\make.exe说明
这是MSYS环境下的GNU Make版本,MSYS是MinGW提供的轻量类Unix模拟环境,内置了全套GNU常用工具(包括rm、ls、bash等)。和mingw32-make相比,该版本的Make对Unix生态的Makefile兼容性更好,默认适配类Unix shell环境,适合写跨平台的Makefile时使用。
内容的提问来源于stack exchange,提问作者Chirag Kadam
相关产品推荐
相关产品推荐

