目录
一、为什么引入Make?
- 示例:当运行如下代码时(main函数内包含add/max的函数):
在终端输入命令编译main文件时,会报如下错误:
而此时需要在main文件后面加上对add和max的编译,不然编译器在编译时找不到,必须加到命令后面,如下图所示解决了问题。
- 然而,如果引用多个函数,每次都这样输入会很麻烦,因此引入make命令将编译过的保存起来,下次就可以直接用了。
二、make的使用方面/编写makefile文件
1.基本概念
make命令不仅用于编译程序,无论何时,当需要通过输入多个文件来输出文件时,都可以用它来完成任务。
makefile为make提供一个文件,告诉它应用程序如何构造。make命令会读取makefile文件的内容,它先确定目标文件或要创建的文件。make命令会根据makefile文件来确定目标文件的创建顺序以及正确规则调用顺序。
mekefile和其他源文件在同一目录下。
2.make命令的选项和参数
make有三个常用选项:
- -k:发现错误时仍然执行。可以利用它在一次操作中发现所有未编译成功的源文件。
- -n:输出要执行的操作步骤,而不是真正执行这些操作。
- -f:告诉make将哪个文件作为makefile文件
为了指示make命令创建一个特定的目标,可以把该目标的名字作为make的一个参数。如果不设置,系统会将makefile文件中列在第一个的作为目标。一般把第一个目标定义为all。
3.写法
依赖关系:定义了最终应用程序每个文件与源文件之间的关系。
规则: makefile文件第二部分的内容。规则所在行必须是TAB开头,不能是空格。
目标:依赖
tab键 规则命名例:
- 想一次创建多个文件,利用伪目标all
- 最后两行的clean作用:在生成可执行文件过程中,删除产生不必要的文件(例如.o文件)。
其中删除规则在命令的实现中有一个横线"-":代表删除出错时不报错。- #:makefile文件的注释以#开头,一直延续到这一行的结束。
4.命令使用
如图所示,先书写makefile文件,然后输入make命令显示出makefile文件的内容,最后可看出,不书写步骤一中的gcc -o main main.c add.c max.c的命令 仍可编译运行出main函数的结果。