RISC-V工具链Makefile中的分隔符和代码错误问题。我如何才能做到正确的?

问题描述 投票:0回答:1

我在创建Makefile时遇到了一个问题。我只是想一个一个地创建.elf文件,然后是dump,最后是bin文件,然后用python脚本把它转换为.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
python c makefile riscv riscv32
1个回答
0
投票

你怎么知道你 "在每个规则上使用了标签"? 光按键盘上的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

你在这里漏掉了parens:这里应该是 $(SCRIPTDIR). 你所拥有的相当于这个。$(S)CRIPTDIR 这不是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.