如何编写可正确引入自定义头文件的C语言项目Makefile
Makefile编写错误原因分析
你最初版本的Makefile存在2个核心问题:
- 缺少目标依赖关系声明
你定义的模式规则%: %.c中虽然在编译命令里用到了mymalloc.o,但并没有把mymalloc.o声明为$(OUTPUT)(即prac)的依赖项。执行make时,make只会检查prac.c存在就直接执行链接命令,不会主动先编译mymalloc.o,因此触发了找不到mymalloc.o的报错。 - 目标文件编译规则命令语法错误
你写的mymalloc.o编译命令为$(CC) $(CFLAGS) -c $@ mymalloc.c,缺少了gcc指定输出文件的-o参数,会让gcc把$@(即mymalloc.o)识别为输入文件而非输出目标,就算手动执行make mymalloc.o也无法正确生成目标文件。
你修改后的版本解决了以上所有问题:
- 显式声明
prac依赖OBJS(即prac.o和mymalloc.o),make执行时会自动先编译所有缺失/过期的.o目标文件,再执行链接 - 统一的
.o文件模式规则语法正确,-c -o $@ $<会把对应的.c依赖文件编译为同名的.o目标文件,逻辑符合编译预期。
内容的提问来源于stack exchange,提问作者Ryan Lee
相关产品推荐
相关产品推荐

