多.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
相关产品推荐
相关产品推荐

