Windows下GNU Make的clean规则执行失败问题求助
解决Windows下GNU Make执行del命令报错的问题
问题原因
del是Windows命令提示符(cmd.exe)的内置命令,并非独立可执行程序。GNU Make在Windows环境下默认直接通过CreateProcess调用命令,而非通过shell中转,因此无法找到del对应的可执行文件,进而触发报错。
解决方案
以下三种方式任选其一即可修复:
1. 显式通过cmd执行del命令
修改clean目标,用cmd /c包裹命令,让cmd来执行内置的del:
clean: cmd /c del $(TARGET)
/c参数用于让cmd执行完指定命令后自动退出。
2. 改用PowerShell的删除命令
如果习惯使用PowerShell,可调用Remove-Item命令,同时避免文件不存在时的报错:
clean: powershell -Command "Remove-Item $(TARGET) -ErrorAction SilentlyContinue"
3. 使用GNU Make内置的RM变量(推荐跨平台)
GNU Make会根据操作系统自动适配RM变量的取值,Windows下会对应合适的删除工具,直接使用即可实现跨平台兼容:
clean: $(RM) $(TARGET)
修改后的完整Makefile示例(以第三种方案为例)
CC = gcc DEPS = $(wildcard *.c *.h) SRCS = $(wildcard *.c) TARGET = mforth.exe $(TARGET): $(DEPS) $(CC) -g $(SRCS) -o $@ fmt: @clang-format -i *.c *.h clean: $(RM) $(TARGET) .PHONY: fmt clean
内容的提问来源于stack exchange,提问作者toobie
相关产品推荐
相关产品推荐

