make工具和Makefile的使用
一、make工具和Makefile文件的引入&emsp 当源码问价比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译
一、make工具和Makefile文件的引入
&emsp 当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具。
make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。
Makefile:make 工具所使用的文件,Makefile指明了编译规则。
1.make工具
利用make工具可以自动完成编译工作,这些工作包括:
· 如果修改列某几个源文件,则只重新编译这几个源文件
**·**如果某个头文件被修改了,则重新编译所有包含该头文件的源文件
利用这种自动编译可以大大简化开发工作,避免不必要的重新编译,make工具通过一个成为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的 编译,连接规则。
2.Makefile文件
Makefile描述了整个工程的编译连接规则。Makefile 的基本规则为:
二、编写C程序
1.源程序部分
编写一个小型的含有多个.c文件的C程序。
main.c
calcu.c
input.c
input.h
calcu.h
编译文件
执行文件
2.对其中部分文件的修改
首先生成所有文件的.o
加入只是对其中的calcu.c进行了修改,那么只需要重新
即可
三、使用make工具和Makefile文件编译
如果修改的文件过多,以至于想不起哪个文件被修改过,为此我们需要一个工具:
1.如果工程没有编译过,那么工程中的所有.c文件都要被编译并且连接成可执行文件。
2.如果工程中只有个别C文件被修改了,那么质变仪这些被修改的C文件即可。
3.如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的C文件,并且连接成可执行文件。
为此我们需要一个Makefile,在工程目录下创建名为"Makefile"的文件,文件名一定要叫做"Makefile"区分大小写
1.Makefile 规则格式
例如:
这同时也是我们之后通过 vi Makefile 命令,在Makefile文件中所撰写的程序。
在所有 .c文件未被编译成 .o文件之前,我们可以通过make命令将所有的.c统一编译:
同样的 ,输入 ./main 来执行程序
倘若之后再对其中的某些程序进行修改,再次使用make命令,Makefile会帮助自动完成(根据最后修改日期是否变动,即使是多增加一个空格)
图中就是只对input.c 进行了修改,make命令能够自动识别
Makefile基本语法
1.Makefile规则格式
在上一小点也已经说过了,这里再提一下
首先检查依赖文件是否都在,通过,则按具体命令执行具体规则
2. Makefile变量
Makefile变量的赋值
Makefile变量的赋值符还有其他两个 := 和 ?=
1.赋值符"="
使用"="再给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值,例如:
(加上@表示不展示命令执行过程)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9ba74c73f3d74591819d08e672e373df.png)
Makefile要输出一串字符的话使用**echo**,就和C语言的**printf**一样
**=**可以借助另一个变量,将变量的真实值推到后面去定义
2.赋值符":="
将上述例子中的=改为:=,再次运行
赋值符":=“不会使用后面定义的变量,只能使用前面已经定义好的,这就是”=“和”:="两个的区别。
3.赋值符"?="
如果前面没有被赋值,那么就是?=后的变量,如果之前已经被赋值了,那么就使用前面赋的值。
4.变量追加"+="
Makefile模式规则
对于通配符而言,我们不能通过 -c %.c 来进行统一编译,应为-c需要准确的文件名,为此我们引入自动化变量(不能想下图那样写)
其中
@
,
@,
@,<和$^,是我们最常用的三种
因此,使用通配符就需要这样写
Makefile伪目标
如果不小心手贱,创建了一个clean文件(通过ls命令我们可以看出该文件已经存在),那么make clean指令将不再有效
通过指令.PHONY:clean 将clean文件设为伪目标,使得指令可以继续生效
更多推荐
所有评论(0)