【Linux】make/Makefile的简单使用

人生的态度是,抱最大的希望,尽最大的努力,做最坏的打算。 – 柏拉图 《理想国》
【Linux】make/Makefile的简单使用_第1张图片

目录

  • 一.Linux项目自动化构建工具-make/Makefile
    • 1.为什么需要使用make/Makefile
    • 2.简单理解make和Makefile
    • 3.如何编写Makefile文件
      • 3.1生成可执行程序:
      • 3.2清理:
        • 这里我们为什么使用的是make clean而不是make呢?
      • 3.3.PHONY关键字
        • 如何判断文件是否需要重新执行?
    • 4.总结:

一.Linux项目自动化构建工具-make/Makefile

1.为什么需要使用make/Makefile

  • 上文中,我们编译hello.c,需要使用gcc hello.c -o hello来生成可执行程序hello,每次我们要生成可执行程序,都要gcc一下,不免有些繁琐。
  • 如果感觉上面麻烦一下也还可以接受,那如果我们的程序包含很多个源文件时,该咋整?用gcc命令逐个去编译时,就发现很容易混乱而且工作量大。因此我们要学会使用make/makefile。有效的利用make和makefile工具不仅可以大大提高项目开发的效率。而且会不会写makefile,从侧面说明了一个人是否具备完成大型工程的能力

2.简单理解make和Makefile

  • make是一个命令工具,是一个解释makefile中指令的命令工具,通过调用makefile文件中用户指定的命令来进行编译和链接的。
  • makefile是一个文件(当前源代码路径下),makefile文件中包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。

3.如何编写Makefile文件

makefile是一个围绕依赖关系和依赖方法构成的一个自动化编译工具
我们介绍一下依赖关系和依赖方法:

  • 依赖关系
    例如我们要生成可执行程序hello,他是依赖于我们的hello.c的,所以他们的依赖关系为hello:hello.c.
  • 依赖方法
    在依赖关系的下一行(tab键开头),写下两者关系实现的方法,gcc hello.c -o hello就是我们hello:hello.c这组依赖关系的依赖方法。

3.1生成可执行程序:

我们写下下面的内容:

【Linux】make/Makefile的简单使用_第2张图片
我们输入make,发现他很快就执行了gcc hello.c -o hello命令,生成了hello的可执行程序

【Linux】make/Makefile的简单使用_第3张图片

3.2清理:

既然可以执行gcc hello.c -o hello命令来生成可执行程序,当然也可以执行rm等你想要执行的命令。
对于依赖关系也有特殊,目标文件对应的依赖文件列表可以是空

  • 目标文件:就是依赖关系中:左边的文件
    • 例如:hello:hello.c,hello就是我们的目标文件
  • 依赖文件列表:就是依赖关系中:右边的文件
    • 例如,hello:hello.c,hello.c就是我们的依赖文件列表,为什么叫列表,就是因为一个目标文件可以依赖多个文件,即:右侧可以有多个文件。

我们就可以这样编写:
【Linux】make/Makefile的简单使用_第4张图片
输入make clean就能执行rm hello命令了。
【Linux】make/Makefile的简单使用_第5张图片

这里我们为什么使用的是make clean而不是make呢?
  • 因为单独使用make,从上到下扫描,默认只会执行第一组依赖关系

证明:

我们将clean写在最前面
【Linux】make/Makefile的简单使用_第6张图片
我们执行clean默认执行了rm hello
在这里插入图片描述
如要执行gcc命令,还要用make hello
【Linux】make/Makefile的简单使用_第7张图片

3.3.PHONY关键字

  • PHONY:总是被执行的!

什么意思呢?
当hello可执行程序已经存在时且是最新的,不需要再次进行编译,make就无法被执行
【Linux】make/Makefile的简单使用_第8张图片
这种现象叫做不总是被执行的!

当我们想每次都可以执行成功时,我们就可以使用.PHONY关键字
.PHONY:目标文件

【Linux】make/Makefile的简单使用_第9张图片

  • 这样我们每次make都能成功
    【Linux】make/Makefile的简单使用_第10张图片
    不过.PHONY对我们的源文件,没有什么意义
    .PHONY一般都是来修饰我们的clean
如何判断文件是否需要重新执行?

当可执行程序已经是最新的时候,make就无法被执行,可他是如何判断的呢?

  • 判断源代码和可执行程序的最近修改时间
    • 当我们的源代码的时间早于可执行程序时,此时就没必要再次执行生成可执行程序,make也就不会被执行
    • 当我们的源代码时间晚于可执行程序时,说明代码有改动,但最新的可执行程序还没有生成,所以make就可以被执行。

我们可以通过stat命令可以显示文件的状态信息

Modify代表文件内容被修改的时间,Change代表文件属性被修改的时间,Access代表最后一次访问文件的时间

【Linux】make/Makefile的简单使用_第11张图片
源代码的最近修改时间早于可执行程序,make也就无法执行.

4.总结:

  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
    make是一个命令工具,是一个解释makefile中指令的命令工具
    makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • makefile的一些简单使用
    • 生成可执行程序
    • 清理
    • .PHONY关键字的使用
  • 以及两个小问题
    • 如何判断文件是否需要重新执行?
    • 为什么使用的是make clean而不是make?

你可能感兴趣的:(Linux,linux,运维,服务器)