You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:42:18