Makefile基础语法规则
Makefile优点
由于在大型工程中,一个完整的c语言项目往往需要很多的c\h文件构成,手动输入gcc xxxxx来编译项目是一个无聊的重复性工作,make的作用就出现了,通过写好的makefile文件,make后会自动的编译修改的文件,而不会整体以编译.
规则格式
| 目标:依赖文件集合(.o文件) |
| 命令1(生成.o文件) |
| 命令2 |
| .... |
| .... |
| |
示例

以下
| (最终)目标是生成main这个可执行文件:他的依赖是右边三个.o文件 不满足就先执行下面的目标 |
| 执行命令编译.o文件为可执行文件 |
| |
| 目标是生成.o文件:依赖是.c文件 |
| 执行命令编译.c文件为.o文件 |
| |
变量(字符串)
| |
| object = main.o input.o calcu.o |
| name = main |
| $(name):$(objects) |
| gcc -o main $(object) |
| |
常用命令
| clean: |
| rm *.o |
| rm $(name) |
| |
| print: |
| @echo xxxxx: $(name) |
| |
| 几个等号: |
| := 不取最后一次的值 |
| ?= 前面没被赋值 则赋值 否则不变 |
| += 变量追加 |
% 模式
| |
| %.o:%.c |
| |
| |
| |
| $@ 目标集合 |
| |
| $% 目标是函数库的时候表示成员名 否则为空 |
| $< 依赖文件的第一个文件 若%定义 则表示符合的集合 |
| |
| $? 所有比目标新的依赖文件的集合,使用空格分开 |
| $^ 素有依赖文件的集合 并去重 |
| |
| $+ 同上 但不去重 |
| |
| $* %及之前的部分 |
| |
| |
伪目标
| 防止因文件名冲突导致的问题 |
| .PHONY:xxx |
| xxx: |
| xxxxxx |
| |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库