一、需求引出:
- 在使用编译器编译代码时,无论我们在一个项目中写了多少个文件(包括头文件、源文件),我们都可以一键完成编译,编译器会自动处理各个文件之间的包含,调用关系。
- 但是在Linux中,我们在一个目录下写一个项目,如果这个项目包含多个头文件和多个源文件,我们需要将他们手动一个个编译成 ".o" 文件,然后链接生成可执行程序。虽然不会耗费很多时间,但是依旧没有使用编译器那样方便。
- 而且,如果我们修改了项目中的一部分文件,我们就需要重新编译这些修改的文件。换而言之,我们需要记住每一个被修改过的文件。这未免成本过高,远不如直接使用编译器划算。
- 所谓自动化构建代码,就是为了解决以上的问题。使得在Linux下也可以像编译器一样,一键将项目编译生成可执行程序。
二、需要的文件和工具:
- 需要的文件为Makefile文件,直接建立在项目所在目录下。需要注意的是该文件的名称一定要为Makefile或者makefile,不能是其他。
- 需要的工具是make,它是用来调用makefile文件的。
- 我们可以简单理解:makefile是一个脚本文件,make是一个脚本解释器。
三、makefile实现简单的自动化构建可执行程序:
3.1详细解析:
- 第一行:要形成的可执行程序的名称 :需要编译的文件的名称
- 第二行:tab键开头(不能使用空格替代) 要执行的命令
- 第一行称为依赖关系,第二行称为依赖方法。通过依赖关系调用依赖方法即可完成自动化调用。
mycode:code.c
gcc code.c -o mycode
3.2案例演示:
- 首先创建一个code.c文件,功能是打印mycode字符串。
- 当前目录下没有可执行程序mycode
- 使用make,自动调用makefile文件中的命令“ gcc code.c -o code.c”
- 查看当前目录,发现生成了可执行程序mycode,并且运行发现可以正常运行。
四、makefile实现清理可执行文件、临时文件:
4.1详细解析:
- 第一行:.PHONY:clean ,表示clean是一个伪目标,将一个命令设置为伪目标,就可以省略他的依赖关系或者依赖方法。
- 第二行:“clean:”,表示clean命令。
- 第三行:tab开头 要执行的指令。
.PHONY:clean
clean:
rm -f mycode
4.2案例演示:
- 当前目录存在可执行程序mycode
- 调用makefile文件的clean命令
- 查看目录,发现可执行程序mycode被清理
五、如何规范的使用make解释器:
5.1规范使用及细节:
- 使用make解释器调用makefile文件时,语法为:“make+命令”
- 可以直接make不加命令,这样使用会直接调用makefile文件的第一个命令,上面第三点构建可执行程序时,就是直接make,可以回顾一下。
- 一般将clean命令放在makefile文件的结尾。
5.2make解释器自动判断代码新旧:
- makefile自动化生成可执行程序时,会自动识别代码的新旧,如果在上一次自动化生成可执行程序之后未对代码做出修改,make解释器会拒绝再次自动化构建可执行程序。