文章目录
前言
曾以为学习过程是痛苦的,其实真正静下心来是美好的,虽然很枯燥,但生活就是这样,不学习还能干吗呢…… ——张顺
makefile是相当重要的,只要你要写大工程,就必须学习makefile,我在网络找了半天没有找到合适且适合学习的资料,于是乎我想写一个关于Makefile系列的文章,将自己所学,并且总结起来,发布出来,和大家一起讨论进步学习。
还有一点:
以后的章节估计多数就要开启付费了,想学习的小伙伴希望继续跟着,一起学习,如有问题欢迎留言共同讨论解决,生活不易,开启付费……
总之Makefile就是编译的工具,和gcc一样,只不过是一堆gcc放到了一起不用你一个个敲gcc -什么 -什么那样的麻烦,于是就出现了Makefile,将所有的编译规则放到了一起,进行整体编译
于是Makefile就是许多招聘网站说必须要会的内容了,因为,在公司当中都是以整个sdk包进行二次开发,所以有自带的Makefile规则,或者需要自己写Makefile规则去配合。
我们直接进入核心知识点,进入“他”的语法格式:
Makefile核心
目标: make编译参数
依赖: 目标的依赖,由什么构成的目标,比如可以是目标的源代码文件等等
tab命令: 必须前面加tab符号,当我的依赖更新则会执行命令
一头雾水是吧,来请出简单的c语言
举例讲解
demo1.c的源代码
写好了简单的c语言后(Linux中vim),怎么运行呢?
毫无疑问,使用gcc编译,然后./a.out运行,或者加个-o起个名字运行。这里不再演示。
既然Makefile也是编译规则,如何用Makefile代替gcc编译呢,我们来接着看
新建一个Makefile文件并写入代码:
看样子是把gcc移到了这个文件里面,没错就是这样的。只不过多了规则——Makefile的规则,即是Makefile核心
保存代码之后,只需要敲一下make(或者make hello),一个hello的可执行文件就出来了,执行的内容就是demo1.c的内容
依次解释:
hello: 目标编译参数
demo1.c hello文件由我这个demo1.c的文件生成
gcc -o hello demo1.c 编译指令,当demo1.c的源文件有改动则会执行这个编译,保证最新的hello目标文件
当我敲下make(或者make hello)之后,他会找到我的目标(hello)执行对应的命令(gcc -o hello demo1.c)代替我的gcc编译,至于clean可以看出是删除编译后的可执行文件,来清除对应的文件。
输入make编译文件
成功编译,且有hello文件
./hello
正是我demo1.c写的源代码的执行结果。
但是按照上面我所讲的Make核心,是由3部分组成,make这里hello没有问题,但是按照所讲因该也会执行clean的规则下的命令删除hello,但是却可以看到hello可以执行并没有被删除,也就是make之后clean规则命令没有被执行,为什么没有呢?
当然不会有,于是乎你发现clean规则中依赖没有,导致无法执行他规则下的命令。
clean规则没有依赖,这就说明,有些规则可以不需要依赖,那么没有依赖如何判断执行rm -f hello这条命令呢?
可以这么做 make clean
成功执行,且没有了hello文件
带参数输入clean则会执行对应的命令,且是无条件执行,不管你有没有hello文件他都会执行对应命令
我想应该讲明白了吧。
结束
希望大家跟着我一起学习,如有问题欢迎留言共同讨论解决,生活不易,开启付费……