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

Makefile模式规则无法匹配obj/llist.o目标的问题求助

Makefile模式规则无法匹配obj/llist.o目标的问题求助

嗨,我来帮你排查这个问题~你遇到的make: *** No rule to make target 'obj/llist.o', needed by 'libshmsock.a'. Stop.错误,核心原因是你的模式规则obj/%.o : ./%.c ./%.h没办法匹配到obj/llist.o的构建需求,具体可能有这几个情况:

1. 缺少对应的源文件或头文件

你的模式规则里,obj/llist.o对应的依赖是./llist.c和./llist.h——也就是项目根目录下的这两个文件。如果这两个文件实际是放在<source-files>子目录里(看你给出的项目结构),那make找不到这两个依赖,就会判定这个模式规则不适用,自然就报错找不到构建obj/llist.o的规则了。

2. 模式规则的依赖路径不匹配

如果你的源文件确实在<source-files>子目录里,那需要调整模式规则的依赖路径。比如假设你的源文件目录实际叫src,那规则应该改成:

obj/%.o : src/%.c src/%.h
    $(GCC) -g -c -o $@  $< -lpthread $(ALL_INC) $(CFLAGS) ${ADD_CLFAGS}

或者你可以先定义一个源目录变量,让规则更灵活:

SRC_DIR := source-files  # 换成你实际的源文件目录名
obj/%.o : $(SRC_DIR)/%.c $(SRC_DIR)/%.h
    $(GCC) -g -c -o $@  $< -lpthread $(ALL_INC) $(CFLAGS) ${ADD_CLFAGS}

3. 文件名拼写不一致

检查一下:Makefile里写的是llist.o,那对应的源文件是不是叫llist.c和llist.h?有没有可能是拼写错误(比如实际是list.c、ll.c之类的),导致make找不到对应的依赖文件?

快速验证方法

你可以先在项目根目录执行find . -name "llist.c"和find . -name "llist.h",看看这两个文件的实际路径是什么,这样就能快速定位是路径问题还是文件缺失/拼写问题了。

备注:内容来源于stack exchange,提问作者Trac3r

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 16:00:28