ARM GNU Makefile文件夹依赖时间戳问题
我想为我的新raspberry pi开发一个小内核,并使用了以下课程: 去理解它。当我从这个站点下载一个包含多个源文件的示例时,它会正确编译第一个源文件,然后告诉我:make***没有规则生成目标“build/”,这是“build/gpio.o”所需要的。停止 让我解释一下。有一个包含所有源文件的文件夹sources。在makefile中,这些文件被编译为build文件夹中的.o文件,但编译汇编程序文件时,build文件夹也被设置为依赖项。因此,当编译第一个文件并创建生成文件夹时,文件夹时间戳已过期,第二个编译文件不能将此目录用作依赖项。这是要解决的问题,但我不知道如何解决 以下是生成文件:ARM GNU Makefile文件夹依赖时间戳问题,makefile,dependencies,directory,gnu,Makefile,Dependencies,Directory,Gnu,我想为我的新raspberry pi开发一个小内核,并使用了以下课程: 去理解它。当我从这个站点下载一个包含多个源文件的示例时,它会正确编译第一个源文件,然后告诉我:make***没有规则生成目标“build/”,这是“build/gpio.o”所需要的。停止 让我解释一下。有一个包含所有源文件的文件夹sources。在makefile中,这些文件被编译为build文件夹中的.o文件,但编译汇编程序文件时,build文件夹也被设置为依赖项。因此,当编译第一个文件并创建生成文件夹时,文件夹时间戳已
ARMGNU ?= arm-none-eabi
# The intermediate directory for compiled object files.
BUILD = build/
# The directory in which source files are stored.
SOURCE = source/
# The name of the output file to generate.
TARGET = kernel.img
# The name of the assembler listing file to generate.
LIST = kernel.list
# The name of the map file to generate.
MAP = kernel.map
# The name of the linker script to use.
LINKER = kernel.ld
# The names of all object files that must be generated. Deduced from the
# assembly code files in source.
OBJECTS := $(patsubst $(SOURCE)%.s,$(BUILD)%.o,$(wildcard $(SOURCE)*.s))
# Rule to make everything.
all: $(TARGET) $(LIST)
# Rule to remake everything. Does not include clean.
rebuild: all
# Rule to make the listing file.
$(LIST) : $(BUILD)output.elf
$(ARMGNU)-objdump -d $(BUILD)output.elf > $(LIST)
# Rule to make the image file.
$(TARGET) : $(BUILD)output.elf
$(ARMGNU)-objcopy $(BUILD)output.elf -O binary $(TARGET)
# Rule to make the elf file.
$(BUILD)output.elf : $(OBJECTS) $(LINKER)
$(ARMGNU)-ld --no-undefined $(OBJECTS) -Map $(MAP) -o $(BUILD)output.elf -T $(LINKER)
# Rule to make the object files.
$(BUILD)%.o: $(SOURCE)%.s $(BUILD)
$(ARMGNU)-as -I $(SOURCE) $< -o $@
$(BUILD):
mkdir $@
# Rule to clean files.
clean :
-rm -rf $(BUILD)
-rm -f $(TARGET)
-rm -f $(LIST)
-rm -f $(MAP)
因此,现在它在这里工作得非常完美,我更改了几行:
$(BUILD)%.o: $(SOURCE)%.s
$(ARMGNU)-as -I $(SOURCE) $< -o $@
$(OBJECTS): | $(BUILD)
$(构建)%.o:$(源)%.s
$(ARMGNU)-as-I$(源)$<-o$@
$(对象):|$(生成)
您要做的是使$(构建)
成为:
我以前试过,但对我不起作用:(它仍然说没有制定目标的规则……你得到的错误似乎与你的分析无关。显然有一个制定
构建
的规则。你确定没有任何其他奇怪的事情发生吗?我知道了,在问题中,如果你真的找到了答案,你应该回答你自己的问题,这样当其他人搜索时,他们就会发现答案。)我们将确保这一问题得到解决。
$(OBJECTS): | $(BUILD)
$(BUILD)%.o: $(SOURCE)%.s
$(ARMGNU)-as -I $(SOURCE) $< -o $@
$(OBJECTS): | $(BUILD)
$(BUILD)%.o: $(SOURCE)%.s | $(BUILD)