【问题标题】:How to use wildcard in Makefile?如何在 Makefile 中使用通配符?
【发布时间】:2020-09-10 13:31:53
【问题描述】:

下面的sn-p:

... rest of makefile ...
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usb_bsp.c
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usb_core.c
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usb_dcd.c
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_cdc_core.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_cdc_vcp.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usb_dcd_int.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_core.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_desc.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_ioreq.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_req.c 
SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/usbd_usr.c
... rest of makefile

编译,但如果我将其替换为:

SRCS += $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/$(wildcard *.c)

make 命令返回链接器错误:

FingerCell/Source/STM32F4-DISCOVERY_USB/User.o: No such file or directory

STM32F4-DISCOVERY_USB 目录不包含除第一个代码 sn-p 中列出的文件之外的其他 .c 文件。 我是否在这里错误地使用了通配符?

【问题讨论】:

  • 看来你需要包含目标文件。您可以咨询make man page
  • 通配符在你告诉它的地方。您告诉它:(1) 查找所有名为 *.c 的文件,(2) 将 $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/ 放在该文本前面
  • 建议:SRCS := $(wildcard $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/*.c) 然后您可以通过:OBJ := $(SRCS:.c=.o)DEP := $(SRCS:.c=.d) 获取对象和依赖项名称
  • 这里有一个提示:在 shell 提示符下运行 ls <wildcard-expression>。如果返回你想要的,那么在你的makefile中写$(wildcard <wildcard-expression>)

标签: makefile linker wildcard


【解决方案1】:
SRCS += $(wildcard $(BASEDIR)FingerCell/Source/STM32F4-DISCOVERY_USB/*.c)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多