Windows10下多目录C程序的Makefile clean目标创建问题求助
问题原因
在Windows 10环境下,你的Make工具默认用的$(RM)变量对应Unix系统的rm -f命令,但Windows原生没有rm这个命令,所以执行make clean时找不到对应程序,直接报错。
解决方案
根据你用的Make环境,有两种靠谱的修复方式:
方式一:用Windows原生删除命令改clean目标
直接把clean里的命令换成Windows的del命令,加上/F(强制删只读文件)和/Q(静默删除,不用确认)参数。另外Windows里基本不会生成*~这类类Unix临时文件,要是你没用到这类编辑器可以直接删掉这部分:
修改后的Makefile:
CC = gcc CFLAGS = -Wall LDFLAGS = OBJFILES = main.o .\views\cli.o .\models\tarefas.o .\controllers\listatarefas.o TARGET = Lab_02_APP all: $(TARGET) $(TARGET): $(OBJFILES) $(CC) $(CFLAGS) -o $(TARGET) $(OBJFILES) $(LDFLAGS) clean: del /F /Q $(OBJFILES) # 要是你用类Unix编辑器生成了*~临时文件,就保留下面这行,否则删掉 # del /F /Q *~
方式二:适配MinGW/MSYS类工具链(如果用的是这类)
如果你用的是MinGW、MSYS或者Git Bash带的Make工具,可以手动指定RM变量为环境里的rm命令。要么在Makefile开头加一行:
RM = rm -f
要么直接写rm的绝对路径(比如RM = C:\msys64\usr\bin\rm -f),确保Make能找到这个命令。
额外优化小建议
- Windows下路径可以用正斜杠
/代替反斜杠\,Make工具都能识别,还能避免转义问题:OBJFILES = main.o ./views/cli.o ./models/tarefas.o ./controllers/listatarefas.o - 要是想让Makefile同时兼容Windows和Unix环境,可以加个条件判断自动选删除命令:
ifeq ($(OS),Windows_NT) RM = del /F /Q FixPath = $(subst /,\,$1) else RM = rm -f FixPath = $1 endif # 用的时候这么写clean目标 clean: $(RM) $(call FixPath,$(OBJFILES))
内容的提问来源于stack exchange,提问作者Minerva
相关产品推荐
相关产品推荐

