我教你写Makefile,你给我介绍Girlfriends.
系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、什么是Makefile?
- 二、Makefile 的规则
- 三、记住这个例子
- 1.整个 make 的工作流程
- 2.Makefile 中特殊变量
- 四、天火三玄变
- 1.第一变
- 2.第二变
- 3.第三变
- 3.1 修炼必备函数
- 3.2 修炼入魔
- 总结
前言
如果写的对你有点帮助的话,别忘了给我介绍,当然如果是小姐姐,可以自荐哦哈哈!
一、什么是Makefile?
怎么说也要走走流程,介绍一下吧! 一个工程里面会有很多文件夹,文件夹里会有很多 .c文件 .h文件,当我们编译时,不可能把所有源文件都写一遍,太费事了,所以Makefile可以实现自动化编译。当我们写出一个比较好的Makefile时,我们就可以make一下,编译整个工程。就相当于阿基米德撬动地球的支点。
本质:文件依赖性
二、Makefile 的规则
target :可以是一个 object file(目标文件),也可以是一个执行文件,还可以是一个标签( label)。
prerequisites: 生成该 target 所依赖的文件和/或 target
command: 该 target要执行的命令(任意的 shell 命令)
核心规则
:
如果prerequisites做了任意变化,target就要更新,就要执行一次command.
牢记
:
command 前面是个Tab,一定要有Tab.
本质
:文件依赖性
目标:依赖文件(我必须得到你才能变成自己想要的样子
)
举例
: main:led.c (要想变成main必须需要led.c
)
三、记住这个例子
main: main.o beep.o led.o usart.o gcc main.o beep.o led.o usart.o -o main
led.o:led.cgcc -c led.c -o led.o
usart.o:usart.cgcc -c usart.c -o usart.o
beep.o:beep.cgcc -c beep.c -o beep.o
main.o:main.cgcc -c main.c -o main.o
clean: rm main.o beep.o led.o usart.o -rf
1.整个 make 的工作流程
以上例介绍
- 输入命令:make
- make会自动编译Makefile
- 会把main当作最终生成的文件
- 但是依赖 .o文件(main.o beep.o led.o usart.o)
- 然而 .o文件依赖 .c 文件
- make clean :清除所有的目标文件,以便重编译
强调:如果增加或减少或改变 .c .h文件,.o文件会被重新编译,当然也就会生成了个新的main.
2.Makefile 中特殊变量
%.c:相当于led.c beep.c usart.c 等等
%.o: 相当于led.o beep.o usart.o 等等
*.o: 相当于led.o beep.o usart.o 等等
$@ 目标文件
$^ 所有的依赖文件
$< 第一个依赖的文件
四、天火三玄变
1.第一变
main:main.o beep.o led.o usart.o gcc $^ -o $@
led.o:led.cgcc -c $< -o $@
usart.o:usart.cgcc -c $< -o $@
beep.o:beep.cgcc -c $< -o $@
main.o:main.cgcc -c $< -o $@
clean: rm *.o -rf
$^ : 相当于main.o beep.o led.o usart.o
$@: 相当于main
看起来简单了一些,但是还可以再变。
2.第二变
main: *.o gcc $^ -o $@
%.o:%.cgcc -c $< -o $@
clean: rm *.o -rf
这样还能看懂吗?需要认真看3.2里的内容哦!实在不懂请私信吧!但是真的很简单了。
3.第三变
危险提示
:实力不济不要强行修炼。
3.1 修炼必备函数
1.函数调用用$符号
2. 函数的参数之间以 , 隔开。函数名字和参数之间用空格隔开
3.
4.
5 .
6 .
7 .
8 .
3.2 修炼入魔
如果继续添加.c文件呢?可不可以写成不管再添加多少.c文件,依然可以适用的Makefile呢?
OBJ := main
CFILE := $(wildcard ./*.c)
OFILE := $(patsubst %.c,%.o,$(CFILE))
$(OBJ) : $(OFILE) gcc $^ -o $@
%.o : %.c gcc -c $< -o $@
clean:rm *.o -rf
解释一番吧!
第一行: 最终文件依然是main
第二行: 当前路径下所有.c文件给CFILE
第三行: 将CFILE里所有.c文件转换成.o文件给OFILE
第四行:main需要依赖所有.o文件
第六行: 所有.o文件需要依赖.c文件
总结
学废没有?
我教你写Makefile,你给我介绍Girlfriends.相关推荐
- 教你写Makefile
转载文 Makefile 值得一提的是,在Makefile中的命令,必须要以[Tab]键开始. 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都 ...
- 跟我一起写makefile: 概述、介绍、规则
跟我一起写makefile 概述.介绍.规则 转自:https://seisman.github.io/how-to-write-makefile/rules.html 概述 什么是makefile? ...
- 【转载】跟我一起写 Makefile(一)
本文转载自:https://blog.csdn.net/haoel/article/details/2886 工欲善其事,必先利其器. 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 活动 ...
- 很不错的教程一步步教你如何写Makefile
[转载:原文地址:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=408225] 陈皓 概述 -- 什么是makefile?或许很多 ...
- 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫
系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相 ...
- 猫哥教你写爬虫 046--协程-实践-吃什么不会胖
吃什么不会胖? 低热量食物 食物的数量有千千万,如果我们要爬取食物热量的话,这个数据量必然很大. 使用多协程来爬取大量的数据是非常合理且明智的选择 如果我们要爬取的话,那就得选定一个有存储食物热量信息 ...
- 猫哥教你写爬虫 006--条件判断和条件嵌套
流程控制 复仇者联盟3-无限战争(搜集宝石) python里面, 不需要使用;来结尾, 因为python是使用换行来结束一行代码的 if判断, 没有{}, python使用缩进来表示层级关系 if.. ...
- 手把手教你写一个生成对抗网络
成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy) 那么,什么是 GANs? 用 Ian Goodfellow 自己的话来说: " ...
- php注册程序,[PHP初级]手把手教你写注册程序 1
[PHP初级]手把手教你写注册程序 1 实例内容 在此教程,我们将通过写一个用户注册程序,学习以下内容: 数据的传输与获取 信息的验证 pdo方式操作数据库 事务处理 前台显示文件:index.php ...
- 跟我一起写 Makefile(整理版)
跟我一起写 Makefile 作者:陈皓 (博客地址:http://blog.csdn.net/haoe ...
最新文章
- C# 特性(Attribute)学习。
- 算法导论——lec 10 图的基本算法及应用
- java储存学生档案应该注意事项_档案管理的注意事项有哪些
- 大数据学习(4)--分布式数据库HBase
- poj 2484 A Funny Game
- Android和iOS智能机去年出货超7亿 同比增长46%
- Leetcode每日一题:42.trapping-rain-water(接雨水)
- 算法导论 练习12.3
- 【STM32】电容触摸按键
- 【番外篇】波动率的几种模型
- 【批处理】快速批量修改特定文件夹的文件名
- Error: The method ‘DioHttpHeaders.add‘ has fewer named arguments than those of overridden method
- PHP超全基础知识点
- 完整登录、注册页面(无功能)
- office 2013 已停止工作;word excel 打开任何文件
- 她这套染色体,曾走过半个地球,记录了漫长的交配史...
- 基于单片机的多功能电子医药盒设计
- 一天的班上玩一直是想去干什么呢
- C++ fstream 创建文件
- 2016校招薪资汇总