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

执行make fclean报missing separator、无rm目标规则错误排查

问题根因

两个报错均为Makefile语法书写不规范导致,和双引号没有任何关系:

  • Makefile:27: *** missing separator 报错:Makefile强制要求每个规则下的执行命令必须以Tab字符作为行首缩进,不能用连续空格替代。你当前clean、fclean规则下的命令行前是多个空格,不符合语法要求。
  • make: *** No rule to make target 'rm', needed by 'clean' 报错:你错误添加双引号+反斜杠续行后,make会把后续的rm识别为目标的依赖项,而非要执行的命令,找不到对应rm目标的构建规则自然报错。另外你原始的fclean目标写法本身就有语法错误:反斜杠是用来续接目标的依赖列表的,不能直接把执行命令接在目标行的续行后面。
修复方案

按以下规则调整Makefile即可:

  • 所有规则下的执行命令行,行首统一用单个Tab字符缩进,禁止用空格代替Tab
  • 修正fclean目标的结构:fclean的依赖仅为clean,删除生成二进制文件的命令要单独放在fclean目标的下一行,用Tab开头
  • 建议取消.PHONY行的注释,避免目录下存在和all/clean/fclean/re同名的文件时,make误判目标已构建不执行对应规则

修正后的完整Makefile内容如下:

##
## **** PROJECT, 2022
## Makefile
## File description:
## Makefile that build the project
##

SRC =       ./main.c    \
            ./calc.c

OBJ = $(SRC:.c=.o)

NAME = fakeProj

CFLAGS = -ftest-coverage -O2

BCK_DIR = backup

CC = clang

all: $(NAME)

$(NAME):    $(OBJ)
	$(CC) -o $(NAME) $(OBJ)

clean:
	rm -f $(OBJ)

fclean: clean
	rm -f $(NAME)

re: fclean  all

.PHONY: all clean fclean re

注意:上述代码里命令行开头的空白是Tab字符,复制后如果你的编辑器自动把Tab转成空格,需要手动改回Tab,否则还是会报分隔符错误。

内容的提问来源于stack exchange,提问作者Cogal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:27:27