make文件基础用法
参照:https://www.jianshu.com/p/0b2a7cb9a469
创建工作目录,包含一下文件
- main.c
- person.c
- b.h
- c.h
/*** c.h ***/ //this is c.h
/*** b.h ***/ //this is b.h
/*** main.c ***/ #include<stdio.h> //#include"a1.h" //#include"b.h" int main() { printf("The Version 1.1\n"); return 0; }
如果main.c文件中加上注释的头文件会生成对应的b.h.gch文件,此处存疑
1.创建makefile文件:
/*** makefile ***/ app: main.o person.o other.o gcc -o app main.o person.o other.o main.o:main.c gcc -c main.c a.h person.o:person.c a.h b.h gcc -c person.c other.o:person.c b.h gcc -c person.c -o other.o clean: rm app main.o person.o other.o
2.定义变量,代替目标文件,简化代码:
objects = main.o person.o other.o app : $(objects) gcc -o app $(objects) main.o : main.c gcc -c main.c c.h person.o : person.c c.h b.h gcc -c person.c other.o : person.c b.h gcc -c person.c -o other.o clean : rm app $(objects)
3.使用makefile自动推导机制,简化指令语句
在编译过程中,哪些类型的文件的编译需要哪些指令是固定的,所以makefile文件可以从依赖关系自动推导出后面要执行的语句
简化如下:
objects = main.o person.o app : $(objects) gcc -o app $(objects) main.o : main.c person.o : person.c c.h b.h clean : rm app $(objects)
只有依赖声明下面没有任何语句,makefile才会自动推导,否则执行指定文件。
注意:这里去掉了other.o,是因为other.o依赖person.c手动生成的other.o,这里的makefile只会生成与依赖文件相同名字的.o文件。
4.如果文件不在一个目录下,需要指定目录,只需要在makefile的第一行添加
VPATH = path1 : path2 :path3
makefile文件会自动按照路径顺序,依次查找文件
如图:
person.c文件在 /home/exbot/wangqinghe/makefileTest
b.h文件在/home/exbot/wangqinghe
c.h 文件在当前目录中2019060601 文件夹下
于是makefile 如下:
VPATH = ./2019060601 :/home/exbot/wangqinghe : /home/exbot/wangqinghe/makefileTest CC = gcc objects = main.o person.o app : $(objects) $(CC) -o app $(objects) @echo "input information : compile finished" #@echo "输出信息:编译完成" main.o : main.c person.o : person.c c.h b.h .PHONY : clean clean : rm app $(objects)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)