繁体   English   中英

RISC-V 工具链 Makefile 错误问题与分隔符和代码有关。 我怎样才能做到正确?

[英]RISC-V Toolchain Makefile error problem with separators and code. How could I do it correct?

我在尝试创建 Makefile 时遇到问题。 我只想一个一个地创建.elf文件,然后是转储文件,最后是bin文件,然后使用python脚本将其转换为.hex文件。 我的目标是仅使用 make 命令实际创建 .elf 和 .hex 文件。

尽管如此,因为我对 Makefiles 非常陌生,所以在执行 make 命令后出现错误:

make
test
make: *** [copy.hex] Error 1

先感谢您!

XLEN ?= 32
RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
RISCV_GCC ?= $(RISCV_PREFIX)gcc
CFLAGS = -O2
./configure --prefix=/home/opt/Risc_V/my_tests --with-arch=rv32if --with-abi=ilp32d
SCRIPTDIR=/home/opt/Risc_V/tools/
RISCV_TEST_DIR=/home/opt/Risc_V/my_tests/my_software

PROGRAMS ?= copy.c
ALL_HEX = $(PROGRAMS:%.c=%.hex)
PWD := $(shell pwd)

all: $(ALL_HEX) $(PROGRAMS)

RISCV_OPTIONS ?= -o $(PROGRAMS).elf $(CFLAGS) 
RISCV_LINK ?= $(RISCV_GCC) $(PROGRAMS) $(RISCV_OPTIONS)#produces .elf file!
RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump -D $(PROGRAMS).elf > $(PROGRAMS).dump#produces a dump file to see the assembly code!
RISCV_OBJCOPY ?= $(RISCV_PREFIX)objcopy -O binary $(PROGRAMS).elf $(PROGRAMS).bin#produces a bin file!



test: all

%.elf: %.c
    $(RISCV_LINK)
%.bin: %.elf
    $(RISCV_OBJDUMP)
%.dump: %.elf
    $(RISV_OBJCOPY)
%.hex: %.bin $(SCRIPTDIR)/bin2hex.py
    test

test: $(SCRIPTDIR)/bin2hex.py
    python $(SCRIPTDIR)/bin2hex.py $(PROGRAMS).bin -a 0x0 > $(PROGRAMS).hex || exit -1

clean:
    rm -rf *.elf *.hex *.map *.objdump *.i *.s *.bin *.dump

你怎么知道你“在每条规则上都使用了标签”? 仅按键盘上的 TAB 键是不够的:您必须确保您的编辑器在您按下 TAB 键时实际插入了一个 TAB 字符,并且当您的编辑器写出您的文件时,它会在写入的文件中保留 TAB 字符(一些编辑器在保存文件时会“有用地”重置空格)。

但是,这很可能不是问题,因为如上所述,您实际上并未向我们展示完整的 makefile,而且我们不知道发生错误的 makefile 的第 30 行是什么。 这可能是一些完全不同的语法错误。 在 SO 上提出问题并包含文件的一部分是没有意义的,但会忽略发生错误的实际行。 您说“它们主要是路径等”,但显然make认为它们有问题,因此您必须将它们展示给我们,否则我们无法帮助您。

我会说您的 makefile 中还有其他各种错误(但这些不是您在此处引用的问题的原因):

%.elf: %.c $(ALL_HEX)
        $$(RISCV_LINK)
%.bin: %.elf
        $$(RISCV_OBJDUMP)
%.dump: %.elf
        $$(RISV_OBJCOPY)

这些不应该使用$$ 您想扩展这些变量,它们应该分别是$(RISCV_LINK)$(RISCV_OBJDUMP)$(RISCV_OBJCOPY)

test: $SCRIPTDIR/bin2hex.py

您在这里缺少括号:这应该是$(SCRIPTDIR) 你所拥有的相当于: $(S)CRIPTDIR这不是你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM