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

多.c文件Makefile项目编译报错:找不到inc/prog_lib.c目标规则

解决Makefile编译错误:make: *** No rule to make target 'inc/prog_lib.c', needed by 'all'. Stop.

先还原你的场景:你用Eclipse搭建了多文件C项目,结构如下:

project/
|____ inc/
|     |___ config_prog.h
|     |___ prog_lib.h
|____ data/
|     |___ img.bmp
|__ prog_lib.c
|__ main.c
|__ makefile

你的Makefile里存在两个关键问题,直接导致了编译报错:

1. 源文件路径完全不匹配

你的Makefile里把prog_lib.c的路径写成了inc/prog_lib.c,但从项目结构能看到,这个C文件明明在项目根目录下,和main.c同级,根本不在inc/文件夹里。Make在查找这个文件时找不到,自然就抛出了「找不到目标文件」的错误。

2. SOURCES变量定义有语法错误

你写的SOURCES=$ main.c inc/prog_lib.c里多了一个多余的$符号,这会让Make解析变量时出现混乱——虽然这不是触发当前错误的直接原因,但也是必须修复的潜在问题。

修正后的Makefile

CC=gcc
CFLAGS= -O0 -c -Wall -mavx2 -mfma
LDFLAGS=
# 修正路径+移除多余的$符号
SOURCES=main.c prog_lib.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=main

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
	$(CC) $(LDFLAGS) $(OBJECTS) -o $@ -lm

.c.o:
	$(CC) $(CFLAGS) $< -o $@

clean:
	rm -fr $(OBJECTS) $(EXECUTABLE)

另外补充两个优化细节:

  • 你原来在.c.o编译规则里加了-lm,其实链接库参数应该放在链接阶段(生成可执行文件的规则),编译阶段不需要,所以我把它移到了正确的位置。
  • 原all规则里的$(TASKMAP)变量未定义,我直接移除了,避免出现新的报错。

内容的提问来源于stack exchange,提问作者A.SDR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:10