Linux-自动化构建make/makefile(初识)
1.认识
makefile是一个文件(该文件中写了如何编译代码,形成可执行程序),make是一条命令,写好了makefile之后,再make一下,整个工程就会自动编译,提高了软件开发的效率

2.重要性
2.1依赖关系和依赖方法
makefile的本质是依赖关系和依赖方法的结合

(第一行是依赖关系,第二行是依赖方法,第二行以tab键开头)
只需要make,即可执行proc的编译工作

.PHNOY:声明一个伪目标,让目标文件对应的方法总是被执行的
第一个clean:是伪目标的名称,可以随便起,这里是起清理作用的
第二个clean:是一行依赖关系,但是没有依赖文件列表
rm -f proc.c:是依赖方法(要形成clean目标文件就要执行他的依赖方法)
只需要make clean即可执行清理方法
2.2make/makefile的基本原理
- makefile文件,会被make从上到下开始扫描,第一个目标名,是缺省形成的。如果我们要执行其他组的依赖关系和依赖方法,要make name(但是一般把形成可执行程序放在第一个)
- makefile在执行gcc命令的时候,如果发生了语法错误,会终止推导过程
- 依赖方法可以是任何指令,并会进行回显,如果想要关闭回显,那么在指令前+@,eg:



- make解释makefile的时候,会 自动推导,推导过程 不执行依赖方法,直到推导到有依赖文件存在,然后再逆向的执行所有的依赖方法

(如图所示,proc依赖于proc.o文件[不存在->将命令入栈],proc.o依赖于proc.s文件[不存在->将命令入栈],proc.s依赖于proc.i文件[不存在->将命令入栈],proc.i文件-依赖于proc.c文件[存在->执行gcc -E proc.c -o proc.i命令],以此类推)
- make默认只形成一个可执行程序,见5(大标题)
3.为什么有时候需要重新编译,有时候不需要
根据对比文件的Mtime做到的,对于源文件.c和可执行程序.exe,.c的时间更加新,则需要重新编;.exe的时间更加新,则不需要重新编。
.PHONY:让依赖方法忽视掉时间对比,这样程序就会被一直执行了。
(rm -f proc)本来就不关心时间
(eg:编译了一遍之后就已经是最新的(up to date),无法进行编译了)
(但是我们如果把.PHNOY放到proc之前)


这样就可以一直make了,因为忽略了时间,.PHONY让总是被做到
4.makefile中的特殊符号

%:是makefile语法中的通配符
%.c:会把当前目录下所有 的.c文件,展开到依赖列表中
$<:右侧的依赖文件,一个一个的交给gcc -c选项,形成同名的.o文件
$^:把所有的依赖文件列表全部交给gcc -c选项,形成同名.o文件
$@:代表目标文件列表

makefile中也可以定义变量,如上图所示
bin和src就相当于变量,要使用的话就$()即可;proc和proc.c是目标文件,
 (最终写成的样子)
(最终写成的样子)
5.一次形成多个可执行文件

(记得在bin1和bin2之间加空格)
