Makefile:没有规则来创建目标 (sdcc)

Makefile: no rule to make target (sdcc)

提问人:retro-bruno 提问时间:11/16/2023 更新时间:11/16/2023 访问量:51

问:

我正在尝试为我启动的 sdcc C 程序做我的第一个 Makefile。

目前,我收到此错误:

make: *** 没有规则来制作目标“out/main.rel”,需要“a.bin”。停。

这是我的 Makefile:

SRC = src/main.c src/include/vdu.c src/include/func.c
INC = include/common.h include/mos.h src/include/vdu.h src/include/func.h
MOSLIBSRC = lib/mos.s crt/crt0.s

CRT = out/crt0.rel
MOSLIB = out/mos.rel
OBJ = out/main.rel out/vdu.rel out/func.rel

EXEC = a.bin
CC = sdcc
LD = sdcc
AS = sdasz80
CLD = sdldz80
OBJCPY = sdobjcopy

ASFLAGS=-plosgff
CFLAGS=-mez80_z80 -Iinclude/ -Isrc/include/ --reserve-regs-iy --std-c11 --fno-omit-frame-pointer
CLINK=--no-std-crt0 -mez80_z80 --code-loc 100

all : $(EXEC)

$(EXEC) : $(OBJ) $(CRT) $(MOSLIB)
    $(CC) -o $(EXEC) $(OBJ) $(CRT) $(MOSLIB) $(CFLAGS)
    $(LD) -o $(OBJ) $(CRT) $(MOSLIB) $(CLINK)
    $(CLD) -nf out/a.lk
    $(OBJCPY) -I ihex -O binary out/a.rel miniGraf.bin

main.rel : src/main.c
    $(CC) -o out/main.rel -c src/main.c $(CFLAGS)

vdu.rel : src/include/vdu.c
    $(CC) -o out/vdu.rel -c src/include/vdu.c $(CFLAGS)

func.rel : src/include/func.c
    $(CC) -o out/func.rel -c src/include/func.c $(CFLAGS)
    
$(CRT) : crt/crt0.s
    $(AS) $(ASFLAGS) -o $(CRT) crt/crt0.s

$(MOSLIB) : $(MOSLIBSRC)
    $(AS) $(ASFLAGS) -o $(MOSLIB) lib/mos.s

clean :
        rm -rf out/*.* out/*  main.bin

我尝试了很多改变,但没有成功。

C 生成文件 SDCC

评论

1赞 WhozCraig 11/16/2023
提示: != .main.relout/main.rel

答:

1赞 BlackJack 11/16/2023 #1

假设您在原始文件中使用了制表符而不是空格:

$OBJ包含,作为 (= ) 的要求给出,但没有 的规则。“只有”一个。从字面上看,这就是错误消息试图告诉您的内容。out/main.rel$EXECa.binout/main.relmain.rel

更改目标以匹配要求,反之亦然。😎