问题引出
c文件可以使用gcc文件进行直接编译,为什么还要使用make?
原因
因为大型的工程中,里面有很多文件,因此进行开发的时候,每个文件都使用gcc进行编译会很麻烦。而使用make文件,则可一次性对很多文件进行编译。
make的好处
![3410df0825fdd364f2eb0628c0a3b29e.png](https://img-blog.csdnimg.cn/img_convert/3410df0825fdd364f2eb0628c0a3b29e.png)
只编译修改过的文件!提高效率。
工作原理
简单来说,就是通过读取makefile中的规则,进行编译。
![a78773307f0dbe785e244dce970efbe9.png](https://img-blog.csdnimg.cn/img_convert/a78773307f0dbe785e244dce970efbe9.png)
make命令
![f99084bdb755e3cedb2128bfd6854889.png](https://img-blog.csdnimg.cn/img_convert/f99084bdb755e3cedb2128bfd6854889.png)
makefile文件结构
![442d2c17f1249c69bdb3da61b856e2ec.png](https://img-blog.csdnimg.cn/img_convert/442d2c17f1249c69bdb3da61b856e2ec.png)
每一个规则由三个部分组成,其中第一部分为目标,表示要生成的文件,一般为.o,或者要执行的动作,如CLEAN,这些使伪目标。
第二个为依赖文件,生成目标文件所需要的文件或者依赖。
第三个为命令,命令是make执行的动作,一个规则可以含有多个命令,每个命令行第一个字符必须使Tab字符。
前提知识gcc命令
![36dcea165ae2826248c0c87b7e45f4a8.png](https://img-blog.csdnimg.cn/img_convert/36dcea165ae2826248c0c87b7e45f4a8.png)
应用程序实例
hello:hello.o #hello为目标文件,hello.o为依赖文件
gcc -o hello hello.o #输出文件 #命令,记得前面加tab
若有多条规则,且前面没有规定执行哪一个文件,则顺序执行命令,若第一个命令出现了文件夹中没有出现的文件名,则顺序检查后面是否出现所需的文件。注意make时,应将其放入同一目录下。
多个文件编译时:
![802d9e1c7708e1dbd4f026c3a778cf6e.png](https://img-blog.csdnimg.cn/img_convert/802d9e1c7708e1dbd4f026c3a778cf6e.png)