makefile语言主要用于大型项目的自动化构建编译,只需要使用make命令便会自动在当前目录下寻找makefile文件并根据makefile文件中的定义的编译规则编译。通过对makefile脚本语言的学习,解答了我之前的一个疑惑,为什么初次编译时间长,但是之后改动代码后时间就少了许多?
这是跟makefile语法规则有关系,以下列句子为例子
edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
该句目的是为了生成一个名为edit的目标文件,冒号后面是需要链接的文件,但是这里会进行一个判断,如果冒号后面的文件有一个以上比edit要新的话,就说明该项目有文件被更新了,就会执行cc-o这一句语句来重新生成edit,而make编译器也会找到是哪个文件需要重新生成,从而精准定位到更改的文件,这样的话就避免了对未更改的文件进行再次编译,所以就节省了很多时间,而对于我提出的这个问题,当项目第一次构建时,当然所有的文件都是新的,所以都需要重新编译,而当后续更改时,我们只更改了部分文件代码,所以make编译器也只会编译部分文件,让后重新链接生成新目标文件,从而节省时间。
在这里提出一个新问题,如果我每次编译前都使用make clean命令把中间文件进行删除,那么每次编译是否会比初次编译缩短时间呢?