使通配符依赖性没有规则来制作所需的目标

时间:2013-11-06 21:58:45

标签: makefile

我正在尝试使用通配符构建目标。这是我的makefile:

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),这样可行,但我想弄清楚为什么这不起作用。< / p>

0 个答案:

没有答案