文章目录
- 前言
- Makefile核心
- 举例讲解
- 结束
前言
曾以为学习过程是痛苦的,其实真正静下心来是美好的,虽然很枯燥,但生活就是这样,不学习还能干吗呢…… ——张顺
makefile是相当重要的,只要你要写大工程,就必须学习makefile,我在网络找了半天没有找到合适且适合学习的资料,于是乎我想写一个关于Makefile系列的文章,将自己所学,并且总结起来,发布出来,和大家一起讨论进步学习。
还有一点:
以后的章节估计多数就要开启付费了,想学习的小伙伴希望继续跟着,一起学习,如有问题欢迎留言共同讨论解决,生活不易,开启付费……
理论了解(可以不看):
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。–百度
Makefile核心
目标: 是要最终生成的文件
依赖: 目标的依赖,由什么构成的目标,比如可以是目标的源代码文件等等
tab命令: 必须前面加tab符号,当我的依赖更新则会执行命令
举例讲解
demo1.c的源代码
和Makefile的源代码
hello: 目标生成的文件
demo1.c hello文件由我这个demo1.c的文件生成
gcc -o hello demo1.c 编译指令,当demo1.c的源文件有改动则会执行这个编译,保证最新的hello目标文件
输入make编译文件
成功编译,且有hello文件
./hello
正是我demo1.c写的源代码的执行结果。
但是按照上面我所讲的Make核心,是由3部分组成,这里hello没有问题,但是按照所讲因该也会执行clean的规则下的命令删除hello,但是却可以看到hello可以执行并没有被删除,也就是clean规则命令没有被执行,为什么没有呢?
当然不会有,于是乎你发现clean规则没有,导致无法执行他规则下的命令。
clean规则没有依赖,这就说明,有些规则可以不需要依赖,那么没有依赖如何判断执行rm -f hello这条命令呢?
可以这么做 make clean
成功执行,且没有了hello文件
带参数输入clean则会执行对应的命令,且是无条件执行,不管你有没有hello文件他都会执行对应命令
我想应该讲明白了吧。
结束
希望大家跟着我一起学习,如有问题欢迎留言共同讨论解决,生活不易,开启付费……