【发布时间】:2013-11-06 21:58:44
【问题描述】:
我正在尝试使用通配符构建我的目标。这是我的 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),这可行,但我想弄清楚为什么这不起作用。
【问题讨论】:
-
您必须运行
make -d并按照逻辑查看make 放弃隐式规则搜索的原因。很可能某些先决条件不被认为可以由 make 创建。但是,如果您将%更改为$(BINARY)并且它的工作原理很奇怪,因为我希望它会给您一个错误,即它无法构建某些文件或其他文件。 -
是否设置了
TOOLCHAIN_DIR?$(TOOLCHAIN_DIR)/lib/libopencm3_stm32f4.a存在吗?stm32f4-discovery.ld是否存在于当前目录中? -
@ComeRaczy,大家都同意。
-
你有没有解决过这个问题?如果是这样:如何?!
标签: makefile