Makefile 错误:rm:无法删除“kernel.img”:没有这样的文件或目录
我一直在尝试使用我的Raspberry Pi 4操作系统,而不是Linux或其他任何东西,我正在从头开始制作一个操作系统 使用命令make时,Makefile出现以下错误: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 我不明白为什么它
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