移动头文件至include目录后Makefile依赖路径报错求助
问题解决:Makefile找不到移动后的头文件
错误原因
你混淆了两个完全独立的环节:-I$(INCLUDE)是给gcc编译器用的,仅负责编译阶段查找头文件;而Makefile里的依赖项是给make工具用的,用来判断目标文件是否需要重新编译。
现在f1.h移到了include/目录下,但你Makefile里的依赖还是写的f1.h,make会在当前目录(Myapp)查找这个文件,自然找不到,所以触发No rule to make target 'f1.h'的错误。
解决方案
有两种简单的修正方式,按需选择即可:
方式一:直接修正依赖路径
把Makefile里的f1.h改成include/f1.h,同时保留-I参数(保证代码里的#include "f1.h"能被编译器找到),修改后的Makefile:
CC = gcc INCLUDE = ./include/ main: main.o f1.o $(CC) -I$(INCLUDE) -o main main.o f1.o main.o: main.c include/f1.h f1.o: f1.c include/f1.h
方式二:用变量统一管理头文件路径(更规范)
如果后续会新增更多头文件,建议用变量统一管理,避免重复修改:
CC = gcc INCLUDE = ./include/ # 统一定义头文件路径 HEADERS = $(INCLUDE)f1.h main: main.o f1.o $(CC) -I$(INCLUDE) -o main main.o f1.o main.o: main.c $(HEADERS) f1.o: f1.c $(HEADERS)
额外提示
如果代码里的#include语句改成#include "include/f1.h",编译时可以去掉-I$(INCLUDE)参数,但用-I指定头文件目录是更通用的做法,项目头文件较多时能让代码更简洁。
内容的提问来源于stack exchange,提问作者honoyang
相关产品推荐
相关产品推荐

