4

ワイルドカードを使用してターゲットを構築しようとしています。ここに私のメイクファイルがあります:

BINARY      = main
LDSCRIPT    = stm32f4-discovery.ld

PREFIX     ?= arm-none-eabi
CC          = $(PREFIX)-gcc
LD          = $(PREFIX)-gcc
OBJCOPY     = $(PREFIX)-objcopy

CFLAGS      += -Os -g \
       -Wall -Wextra -Wimplicit-function-declaration \
       -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes \
       -Wundef -Wshadow \
       -I$(TOOLCHAIN_DIR)/include \
       -fno-common -mcpu=cortex-m4 -mthumb \
       -mfloat-abi=hard -mfpu=fpv4-sp-d16 -MD -DSTM32F4
LDSCRIPT    ?= $(BINARY).ld
LDFLAGS     += --static -lc -lnosys -L$(TOOLCHAIN_DIR)/lib \
       -L$(TOOLCHAIN_DIR)/lib/stm32/f4 \
       -T$(LDSCRIPT) -nostartfiles -Wl,--gc-sections \
       -mthumb -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16
OBJS        += $(BINARY).o

all: images

images: $(BINARY).images

%.images: %.bin
    @#printf "*** $* images generated ***\n"

%.bin: %.elf
    @#printf "  OBJCOPY $(*).bin\n"
    $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin

%.elf: $(OBJS) $(LDSCRIPT) $(TOOLCHAIN_DIR)/lib/libopencm3_stm32f4.a
    @#printf "  LD      $(subst $(shell pwd)/,,$(@))\n"
    $(Q)$(LD) -o $(*).elf $(OBJS) -lopencm3_stm32f4 $(LDFLAGS)

%.o: %.c Makefile
    @#printf "  CC      $(subst $(shell pwd)/,,$(@))\n"
    $(Q)$(CC) $(CFLAGS) -o $@ -c $<

clean:
    $(Q)rm -f *.o
    $(Q)rm -f *.d
    $(Q)rm -f *.elf
    $(Q)rm -f *.bin

-include $(OBJS:.o=.d)

作成すると、エラーが発生します。

make: *** No rule to make target `main.bin', needed by `main.images'.  Stop.

単一の画像を作成しようとしているので、それぞれ%$(BINARY)に変更できますが、これは機能しますが、なぜ機能しないのかを突き止めたいと思います。

4

1 に答える 1