1.make和makefile的作用就是为了避免想要多次gcc,每次都得输入gcc指令.
make是一个命令,makefile是一个文件:输入make指令就会执行当前文件下的makefile文件,makefile文件里的内容就是gcc.格式如下
1.1简单的makefile文件内容
第一行分别是生成对象:依赖对象(生成对象只能是一个,但是依赖对象可以依赖多个,因为想要得到的结果不一定是只依赖一个文件)
第二行是编译指令 gcc前面是一个tab键,不能以空格代替
1.2也可以在makefile文件里分步写编译命令
1.3多个依赖对象
1.4也可以将多个依赖对象拆分
2.若依赖对象的最后依次修改时间小于目标对象的最后一次修改时间,则不需要重新生成
看图可知make执行之后makefile里的命令已经执行,并且新的文件已经生成在当前目录下.ll之后发现practic的最后修改时间是14号,二practic.c的最后修改时间是11号,说明在生成practic之后practic.c没有修改过,当前的practic和当前的practic.c是匹配的 .如果再执行make就不会再生成了.当依赖对象的修改日期比生成对象的修改日期新,说明依赖对象和生成对象不匹配,所以需要重新生成.
makefile文件同样支持头文件包含,也可以进行变量替换
$^:代表所有依赖对象
$@:代表目标对象
$<:第一个依赖对象
变量替换不是简单的替换,需要例如a=-o gcc时,不能用a代替-o,需要用$(a);类似于指针里的解引用
3.伪目标:用.PHONY修饰(作用就是总是被执行)
作用1: 第一行加.PHONY : [目标对象]
.当依赖对象的最后依次修改时间小于目标对象的最后一次修改时间,再执行make指令,依然会执行makefile里的内容
作用2:当目标文件生成之后当前目录下回显示出来,想删除需要rm命令.
再makefile文件里加以下三行
.PHONY:clean
clean:
rm [生成的目标文件]
这三行的意思时:第一行定义一个伪目标clean,第二行生成对象时clean,依赖对象没有,第三行是命令
当make执行后会生成目标文件
再执行make clean 就能删除这个文件