gpt4 book ai didi

makefile - 使通配符依赖 没有规则来使目标需要

转载 作者:行者123 更新时间:2023-12-04 14:22:51 25 4
gpt4 key购买 nike

我正在尝试使用通配符构建我的目标。这是我的 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) ,这有效,但我想弄清楚为什么这不起作用。

最佳答案

您可能在链条下游的某个地方遗漏了一个依赖项。
注意:有些人忘记了“Makefile”本身,当放置在依赖行上时 - 也会检查是否存在。仔细检查您是否没有重命名它。
就像@MadScientist 推荐的那样,“make -d”将成为您的 friend 。使用它来定位应该找到但没有找到的规则/文件。
我简化了你的例子(在 Linux 上)并得到了相同类型的错误:
生成文件:

all: main.out
%.out: %.elf
g++ $^ -o $@
%.elf: %.obj
mv $^ $@
%.obj: %.cpp Makefile
g++ -c $^ -o $@
创建 main.cpp,查看它是否工作,然后将 main.cpp 重命名为它无法找到的其他内容,再次运行,查看它是否失败。
现在重命名 Makefile 本身,看到同样的失败。

关于makefile - 使通配符依赖 没有规则来使目标需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19823684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com