Makefile 错误:rm:无法删除“kernel.img”:没有这样的文件或目录

Makefile 错误:rm:无法删除“kernel.img”:没有这样的文件或目录,makefile,Makefile,我一直在尝试使用我的Raspberry Pi 4操作系统,而不是Linux或其他任何东西,我正在从头开始制作一个操作系统 使用命令make时,Makefile出现以下错误: rm -rf objects rm -rf SuperPiOS.elf rm SuperPiOS.img rm: cannot remove 'SuperPiOS.img': No such file or directory make: *** [Makefile:110: clean] Error 1 我不明白为什么它

我一直在尝试使用我的Raspberry Pi 4操作系统,而不是Linux或其他任何东西,我正在从头开始制作一个操作系统

使用命令make时,Makefile出现以下错误:

rm -rf objects
rm -rf SuperPiOS.elf
rm SuperPiOS.img
rm: cannot remove 'SuperPiOS.img': No such file or directory
make: *** [Makefile:110: clean] Error 1
我不明白为什么它不起作用

以下是生成文件:

CFLAGS=-Wall-O2-ffreserving-nostdinc-nostdlib-mcpu=cortex-a72+nosimd CXXFLAGS=-ggdb3-O0-Wall-O2-FFreserving-nostdinc-nostdlib-mcpu=cortex-a72+NosMD CSRCFLAGS=-O2-墙壁-Wextra LFLAGS=-ffreserving-O2-nostlib IMG_路径=/ c文件=$wildcard*.c OFILES=$c文件:.c=.o GCCFLAGS=-Wall-O2-ffreserving-nostinc-nostlib-nostartfiles GCCPATH=gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf GCCPATHARCH=$GCCPATH/aarch64无elf/bin GCCPATHBIN=$GCCPATH/bin ASMCFLAGS=-f elf32-f dwarf-g-w+all ASM=-s 文件的位置 keren_SRC=../SRC/kernel keru MENU\u SRC=../SRC/kernel/MENU KER_头=../包括 公共_SRC=../SRC/COMMON UI_IMAGES=../IMAGES/UI SPE_游戏=../SPE_游戏 DINOBYTE=$SPE_GAMES/DINOBYTE OBJ_DIR=对象 ASMSOURCES=$wildcard$keru SRC/*.s KERSOURCES=$wildcard$keru SRC/*.c KERSOURCES=$wildcard$keru SRC/$ARCHDIR/*.c COMMONSOURCES=$wildcard$COMMON_SRC/*.c KERSOURCESCPP=$wildcard$keru SRC/*.cpp DINOBYTESOURCES=$wildcard$DINOBYTE/src/*.cpp KERSOURCESCPP=$wildcard$keru SRC/$ARCHDIR/*.cpp KERMENUSOURCESC=$wildcard$keru菜单\u SRC/*.c KERMENUSOURCESCPP=$wildcard$keru MENU\u SRC/*.cpp UISOURCES=$wildcard$UI\u IMAGES/*.png OBJECTS=$patsubst$keru SRC/%.s$OBJ_DIR/%.o$ASMSOURCES OBJECTS+=$patsubst$keru SRC/%.s$OBJ_DIR/%.o$ASMSOURCES OBJECTS+=$patsubst$keru SRC/%.c$OBJ_DIR/%.o$KERSOURCES OBJECTS+=$patsubst$keru SRC/%.cpp$OBJ_DIR/%.o$KERSOURCESCPP OBJECTS+=$patsubst$COMMON_SRC/%.c、$OBJ_DIR/%.o、$COMMONSOURCES OBJECTS+=$patsubst$keru MENU_SRC/%.c、$OBJ_DIR/%.o、$KERMENUSOURCESC 对象+=$patsubst$KER_MENU_SRC/%.cpp、$OBJ_DIR/%.o、$KERMENUSOURCESCPP OBJECTS+=$patsubst$UI\u IMAGES/%.png、$OBJ\u DIR/%.o、$UISOURCES Dinobyte对象[此处包括Dinobyte标头]稍后执行 OBJECTS+=$patsubst$DINOBYTESOURCES/src/%.cpp、$OBJ_DIR/%.o、$DINOBYTESOURCES 标题 标题=$wildcard$keru HEAD/*.h IMG_NAME=SuperPiOS 构建:$OBJECTS$HEADERS $CC-T linker.ld-o$IMG_NAME.elf$LFLAGS$OBJECTS需要缩进 $OBJCOPY$IMG_NAME.elf-O二进制文件$IMG_NAME.IMG需要缩进 $OBJ_DIR/%.o:$KER_SRC/%.s mkdir-p$@D需要缩进 $CC$CFLAGS-I$KER\U SRC-c$<-o$@需要缩进 $OBJ_DIR/%.o:$KER_SRC/%.s $GCCPATHBIN/aarch64无elf gcc$GCCFLAGS-c$KER_SRC-o$OBJ_DIR $OBJ_DIR/%.o:$KER_SRC/%.c $GCCPATHBIN/AARC64无elf gcc$GCCFLAGS-c$<-o$@ $OBJ_DIR/%.o:$keru SRC/$ARCHDIR/%.c $GCCPATHBIN/AARC64无elf gcc$GCCFLAGS-c$<-o$@ $OBJ_DIR/%.o:$KER_SRC/%.cpp $GCCPATHBIN arm none eabi cpp$GCCFLAGS-c$<-o$@ $OBJ_DIR/%.o:$keru SRC/$ARCHDIR/%.cpp $GCCPATHBIN/AARC64无elf gcc$GCCFLAGS-c$<-o$@ $OBJ_DIR/%.o:$COMMON_SRC/%.c $GCCPATHBIN/AARC64无elf gcc$GCCFLAGS-c$<-o$@ $OBJ_DIR/%.o:$KER_MENU\u SRC/%.c mkdir-p$@D $CC$CFLAGS-I$KER_SRC-I$KER_HEAD-c$<-o$@$CSRCFLAGS $OBJ_DIR/%.o:$KER_MENU\u SRC/%.cpp mkdir-p$@D $CC$CXXFLAGS-I$KER_SRC-I$KER_HEAD-c$<-o$@$CSRCFLAGS $IMG_NAME%.IMG:$OBJECTS$HEADERS $GCCPATHBIN/aarch64 none-elf-ld-nostdlib-nostartfiles$OBJECTS-T linker.ld-o$IMG_NAME.elf $GCCPATHBIN/aarch64无elf对象复制-O二进制文件$IMG_NAME.elf$IMG_NAME.IMG 清洁: rm-rf$OBJ_DIR rm-rf$IMG_NAME.elf rm$IMG_NAME.IMG 运行:构建 qemu系统arm-m 128-无需重新启动-m raspi4-串行stdio-kernel kernel.elf dbg: $GDB kernel.elf dbgrun:构建gdbinit qemu系统arm-m 128-无需重新启动-m raspi4-串行标准配置-kernel kernel.elf-S-S .冒牌货:gdbinit 格德比尼特: 回显目标远程本地主机:1234>.gdbinit 回音中断内核\u main>.gdbinit
你有两个问题。最明显的是,该命令:

rm SuperPiOS.img
失败是因为rm程序就是这样定义的:如果您要求它删除的文件不存在,则rm将失败。如果不希望发生这种情况,请添加-f选项:

现在,如果文件不存在,rm将以静默方式成功。您可以检查rm程序的手册页

然而,你可能会问的更高层次的问题是,为什么当我运行make时,它运行的是干净规则

这是因为make,如果您不在命令行上指定要构建的内容,则总是构建第一个显式目标。在这个makefile中,您定义的第一个显式目标是干净的,所以这就是所构建的。这几乎肯定不是你想要的。当运行make时,您应该在没有参数的情况下确定要构建的目标,并将该目标的规则作为makefile中的第一个显式目标

除了这个规则之外,如果您有多个模式规则都可以构建同一个目标,例如多个模式规则,那么什么顺序规则通常无关紧要
若要构建%.o,那个么订单在那个里很重要。

那个么我该怎么做呢?因为我有点困惑???将clean规则移动到makefile的底部,或者至少移动到某个地方,使其不是makefile中的第一个显式规则。我不知道怎么说得更清楚。
rm -f SuperPiOS.img