GCC 致命错误 makefile 中没有输入文件

这部分代码有效。我首先说明我将使用什么编译器以及我的项目的一些基本逻辑(我正在尝试创建一个基本的树莓派操作系统)。我所做的大部分工作都来自我在网上找到的指南https://jsandler18.github.io/tutorial/dev-env.html我不介意重新开始,但想知道发生了什么。

    CC = arm-none-eabi-gcc

    ifeq ($(RASPI_MODEL),1)
         CPU = arm1176jzf-s
         DIRECTIVES = -D MODEL_1
    else
         CPU = cortex-a7
    endif

    CflaGS= -mcpu=$(CPU) -fpic -ffreestanding $(DIRECTIVES)
    CSRCflaGS= -O2 -Wall -Wextra
    LflaGS= -ffreestanding -O2 -nostdlib

    KER_SRC = ../src/kernel
    KER_HEAD = ../include
    COMMON_SRC = ../src/common
    OBJ_DIR = objects
    KERSOURCES = $(wildcard $(KER_SRC)/*.c)
    COMMONSOURCES = $(wildcard $(COMMON_SRC)/*.c)
    ASMSOURCES = $(wildcard $(KER_SRC)/*.S)
    OBJECTS = $(patsubst $(KER_SRC)/%.c,$(OBJ_DIR)/%.o,$(KERSOURCES))
    OBJECTS += $(patsubst $(COMMON_SRC)/%.c,$(COMMONSOURCES))
    OBJECTS += $(patsubst $(KER_SRC)/%.S,$(ASMSOURCES))
    HEADERS = $(wildcard $(KER_HEAD)/*.h)

    IMG_NAME=kernel.img

GCC 错误指出这部分代码没有输入文件。如果我删除 -o 并移动 -T 它不会给我一个错误,但它仍然不起作用。我猜这与 $(OBJECTS) 或我的标志的顺序有关。

     build: $(OBJECTS) $(HEADERS)
          echo $(OBJECTS)
          $(CC) -T linker.ld -o $(IMG_NAME) $(LflaGS) $(OBJECTS)

这部分应该创建一个新目录并创建一个易于理解的结构。无论我尝试修改它都不起作用。我怀疑 $(@D) 是罪魁祸首,我在 makefile 中几乎没有发现这方面的文档,也不理解。

$(OBJ_DIR)/%.o: $(KER_SRC)/%.c
     mkdir -p $(@D)
     $(CC) $(CflaGS) -I$(KER_SRC) -I$(KER_HEAD) -c $< -o $@ $(CSRCflaGS)

同样适用于这里,而不是创建一个结构,它什么都不做,绝对什么都不做。

 $(OBJ_DIR)/%.o: $(KER_SRC)/%.S
      mkdir -p $(@D)
      $(CC) $(CflaGS) -I$(KER_SRC) -c $< -o $@

 $(OBJ_DIR)/%.o: $(COMMON_SRC)/%.c
      mkdir -p $(@D)
      $(CC) $(CflaGS) -I$(KER_SRC) -I$(KER_HEAD) -c $< -o $@ $(CSRCflaGS)

无论我尝试什么,这都不会删除任何内容。对于这部分,我不知道可能是什么问题。

clean:
    rm -rf $(OBJ_DIR)
    rm $(IMG_NAME)

这部分正在工作,我确信如果我运行我的构建,它会执行这个命令并完成它的工作。

run: build
    qemu-system-arm -m 1024 -M raspi2 -serial stdio -kernel kernel.img

当我尝试运行这个 makefile 时:

make build

输出如下:

arm-none-eabi-gcc -T linker.ld -o kernel.img -ffreestanding -O2 - 
nostdlib   
arm-none-eabi-gcc: fatal error: no input files
compilation terminated.
make: *** [Makefile:34: build] Error 1

运行时

ls ../src

终端输出

ls: cannot access '../src': No such file or directory

在终端中运行 'dir' 时会出现以下情况:

boot.o  boot.S  cpp_make.cpp  gcc-arm-none-eabi-10-2020-q4-major  kernel.c  kernel.img  linker.ld  Makefile  myos.elf  rasemu  src
zt48475144 回答:GCC 致命错误 makefile 中没有输入文件

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1131.html

大家都在问