簡體   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