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

GNU Make使用模式规则时报错No rule to make target '%.c'如何解决?

错误原因

你当前的写法不符合GNU Make模式规则的语法要求:

  • 模式规则的核心是目标和依赖都需要包含通配符%,用于保证目标和依赖的匹配字段一致,典型合法写法如%.o: %.c,表示所有.o文件的编译依赖对应同名的.c文件。
  • 你单独在依赖位置写%.c时,Make不会把它识别为匹配所有.c文件的通配符,只会将其当做字面意义上的文件%.c去查找,找不到就会抛出你遇到的报错。

正确解决方案

如果你要实现「将当前目录所有.c文件编译为同一个test可执行」的需求,不需要用模式规则,使用Make内置的wildcard函数获取所有.c文件即可,正确的Makefile写法如下:

# 匹配当前目录所有.c文件,存入SRCS变量
SRCS := $(wildcard *.c)

all: test

test: $(SRCS)
	gcc -o $@ $^

注意这里用自动变量$^代替$?,$^会展开为所有依赖文件,符合全量编译所有源文件的需求;$?仅会展开为比目标更新的依赖文件,适合增量编译场景。

模式规则的正确使用场景

如果你需要的是「每个.c文件单独编译为对应同名的可执行文件」,才需要使用模式规则,写法如下:

# 匹配任意名称的可执行目标,依赖对应同名的.c文件
%: %.c
	gcc -o $@ $<

该规则生效后,执行make test会自动编译test.c生成test可执行,执行make test2会自动编译test2.c生成test2可执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:05