gpt4 book ai didi

gcc - Makefile vpath %.o 未找到 obj 文件

转载 作者:行者123 更新时间:2023-12-01 07:19:53 25 4
gpt4 key购买 nike

我正在使用以下 vpath 尝试定位我的 $(OBJ) 文件:

vpath %.o ./lib/obj

我的目标是这样设置的:
# Link target
link:
@echo "\nLinking files"
$(CC) $(LINK_FLAGS) -o main.elf $(OBJS)

查看输出时,我得到(对于所有 *.o 文件):
...error: misc.o: No such file or directory

我的项目结构如下:
.
├── Makefile
├── inc
│   └── main.h
├── lib
│   ├── inc
│   │   ├── cmsis
│   │   │   ├── arm_common_tables.h
│   │   │   ├── ...
│   │   ├── peripherals
│   │   │   ├── misc.h
│   │   │   ├── ...
│   │   └── stm32f4xx
│   │   ├── stm32f4xx.h
│   │   ├── ...
│   ├── obj
│   │  ├── misc.o
│   ├── src
│   │   ├── peripherals
│   │   │   ├── misc.c
│   │   │   ├── ...
│   │   └── system_stm32f4xx.c
│   └── startup_stm32f4xx.s
├── src
│   └── main.c
└── stm32f4.ld

为什么找不到我的 .o 文件?

完整输出供引用:

arm-none-eabi-gcc -T"stm32f3.ld" -nostartfiles -Wl,-Map,"main.map" -mcpu=cortex-m4 -mthumb -g3 -gdwarf-2 -L"./" -o main.elf misc.o stm32f4xx_adc.o stm32f4xx_can.o stm32f4xx_crc.o stm32f4xx_cryp.o stm32f4xx_cryp_aes.o stm32f4xx_cryp_des.o stm32f4xx_cryp_tdes.o stm32f4xx_dac.o stm32f4xx_dbgmcu.o stm32f4xx_dcmi.o stm32f4xx_dma.o stm32f4xx_exti.o stm32f4xx_flash.o stm32f4xx_fsmc.o stm32f4xx_gpio.o stm32f4xx_hash.o stm32f4xx_hash_md5.o stm32f4xx_hash_sha1.o stm32f4xx_i2c.o stm32f4xx_iwdg.o stm32f4xx_pwr.o stm32f4xx_rcc.o stm32f4xx_rng.o stm32f4xx_rtc.o stm32f4xx_sdio.o stm32f4xx_spi.o stm32f4xx_syscfg.o stm32f4xx_tim.o stm32f4xx_usart.o stm32f4xx_wwdg.o system_stm32f4xx.o

最佳答案

$(OBJS)只是一个变量,并被扩展为文本。当它出现在您的 link 中的命令文本中时规则,它只是简单地扩展为文本。
vpath搜索应用于 先决条件 ,所以你必须安排你的$(OBJS)作为链接规则和规则命令的先决条件出现在 use those prerequisites (通过自动变量,而不是直接使用 $(OBJS))。

所以你的规则需要看起来更像

# Link target
link: main.elf

main.elf: $(OBJS)
@echo "\nLinking files"
$(CC) $(LINK_FLAGS) -o $@ $+

(我还冒昧地将生成的文件 (main.elf) 写出作为中间规则的非虚假目标。使这些内容对 Make 显式通常是一个好主意。)

关于gcc - Makefile vpath %.o 未找到 obj 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15098881/

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