make文件中的以下表达式是什么意思?

What does the following expression in make file mean?

我正在查看 SDK 的 Makefile,<project>.elf 规则取决于 C_OBJSC_OBJS 定义如下。

C_OBJS = $(C_FILES:%.c=$(BUILD_DIR)/%.o)

C_FILES 是所有 C 文件的集合。

我无法弄清楚的是,Makefile 是如何知道如何在将这些 C 文件链接成 elf 之前将它们转换为各自的 OBJS(因为 elf 规则只链接它们)

对于 patsubst 函数,$(C_FILES:%.c=$(BUILD_DIR)/%.o) 是 shorthand。参见 here

就了解如何构建 .o 文件而言,除非您明确禁用它们,否则 make 将使用一组预定义的 implicit rules,其中一个构建 .o 文件来自.c 个文件。