You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Makefile中的"No rule to make target"错误?

解决Makefile无法生成obj/cli.o的问题

问题核心是Make默认只会在当前目录查找cli.c,但你的cli.c位于embedded-cli子目录下,因此需要明确告诉Make该目标对应的源文件路径,或者通过规则匹配处理子目录源文件。

以下是两种可行的解决方式:

方式1:为cli.o编写单独的编译规则

直接在Makefile中添加针对obj/cli.o的规则,指定其依赖的源文件路径:

# 假设你已经定义了CC、CFLAGS等编译变量
obj/cli.o: embedded-cli/cli.c
	$(CC) $(CFLAGS) $(DIR_FLAGS) -c $< -o $@
  • $< 代表规则中的第一个依赖文件(即embedded-cli/cli.c)
  • $@ 代表目标文件(即obj/cli.o)

方式2:用通用规则匹配子目录源文件

如果后续可能有更多子目录下的源文件,推荐用模式匹配规则统一处理:

# 先确保obj目录存在(可选但推荐,避免因目录缺失报错)
$(shell mkdir -p obj)

# 通用规则:处理当前目录下的.c文件生成obj/*.o
obj/%.o: %.c
	$(CC) $(CFLAGS) $(DIR_FLAGS) -c $< -o $@

# 通用规则:处理embedded-cli目录下的.c文件生成obj/*.o
obj/%.o: embedded-cli/%.c
	$(CC) $(CFLAGS) $(DIR_FLAGS) -c $< -o $@

这样所有embedded-cli下的.c文件都会自动生成对应的obj/*.o目标文件。

额外注意事项

  • 确保你的最终目标(比如cli_stm32f4.bin)的依赖列表中明确包含obj/main.o和obj/cli.o
  • 如果用变量管理源文件,比如SRCS = main.c embedded-cli/cli.c,可以用以下方式自动生成对应的目标文件列表:
SRCS = main.c embedded-cli/cli.c
OBJS = $(addprefix obj/, $(notdir $(SRCS:.c=.o)))
# 上述代码会将main.c转换为obj/main.o,embedded-cli/cli.c转换为obj/cli.o

内容的提问来源于stack exchange,提问作者EmTor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:55:37