【Linux工具篇】项目自动构建化工具-make/Makefile

个人主页:平行线也会相交
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 平行线也会相交 原创
收录于专栏【Linux专栏】
本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论
在这里插入图片描述

目录

  • 文章导读
  • make和Makefile的关系
    • make
    • Makefile
    • 依赖关系
    • 依赖方法
  • 项目清理(make clean)
  • 拓展
  • 总结

文章导读

make是一个命令,而Makefile是当前目录的一个文件

make/Makefile是完成大型项目非常好用的工具。它可以帮助项目团队更好地组织和管理代码,提高构建效率和可维护性,从而加快项目开发和交付的速度。

可以毫不犹豫地这样说:会不会写Makefile,从侧面说明了一个人是否具备完成大型项目的能力。

make和Makefile的关系

make和Makefile是紧密相关的概念,两者结合使用可以实现自动化的项目构建和管理。make通过读取Makefile文件,根据其中的规则和命令来执行构建任务,而Makefile提供了一种描述规则和依赖关系的格式,使得构建过程可以被自动化和可重复使用。

make

make是一个构建工具,用于自动化构建软件项目

make命令执行后,会自动的在当前目录下寻找Makefile/makefile文件,然后根据Makefile/makefile文件内部对应的依赖关系执行对应的依赖方法形成目标文件。
【Linux工具篇】项目自动构建化工具-make/Makefile_第1张图片

Makefile

Makefile是一个文本文件,它包含了一系列的规则和命令,用于描述项目的构建过程。Makefile中定义了目标(target)以及每个目标的依赖关系、构建规则和执行命令。这些规则和命令告诉make如何根据源代码文件和依赖关系自动化地执行编译、链接和其他构建操作。

创建一个Makefile文件:

touch Makefile

编译Makefile文件:

vim Makefile

【Linux工具篇】项目自动构建化工具-make/Makefile_第2张图片
依赖关系:mycode:test.c。mycode可执行文件之所以能够生成是因为mycode可执行文件依赖于源文件test.c。
但是仅仅有以来关系是不够生成mycode可执行文件的,我们还得有依赖方法。
依赖方法:gcc -o mycode test.c

依赖关系

Make 工具会从指定的目标开始,根据 Makefile 文件中所定义的依赖关系进行递归扫描

当执行 make 命令时,如果没有指定目标,默认会执行 Makefile 文件中的第一个目标。Make 工具首先会检查该目标的依赖关系。如果该目标有依赖项,工具会继续递归扫描这些依赖项的依赖关系,并按照依赖关系的顺序执行相应的命令。

下面举一个更详细的例子来解释依赖关系:
【Linux工具篇】项目自动构建化工具-make/Makefile_第3张图片
执行make命令后:
【Linux工具篇】项目自动构建化工具-make/Makefile_第4张图片

解释:
mycode依赖于mycode.o
mycode.o依赖于mycode.s
mycode.s依赖于mycode.i
mycode.i依赖于test.c

但是真正保存这种依赖关系的结构是栈式结构(先进后出)。

依赖方法

【Linux工具篇】项目自动构建化工具-make/Makefile_第5张图片
上图中的黄体字就是具体的依赖方法。

项目清理(make clean)

执行 make clean 命令后,会按照 clean 目标下定义的依赖方法依次执行,删除所指定的文件或文件夹。

【Linux工具篇】项目自动构建化工具-make/Makefile_第6张图片
【Linux工具篇】项目自动构建化工具-make/Makefile_第7张图片

拓展

拓展一:
如果想要禁止显示命令本身,只输出命令执行结果,可以在命令前加上@。即通过在每个命令规则行前添加@,可以阻止显示命令本身,只输出命令执行结果。

【Linux工具篇】项目自动构建化工具-make/Makefile_第8张图片
【Linux工具篇】项目自动构建化工具-make/Makefile_第9张图片

拓展二(特殊符号):

$@ 表示当前目标(Target)
$^ 表示所有的依赖项
【Linux工具篇】项目自动构建化工具-make/Makefile_第10张图片

总结

  • make是一个指令,makefile是一个文件,二者互相配合来使用
  • make命令会自动推导makefile文件中的依赖关系,整个推导的过程是栈式结构。
  • Make 工具从指定的目标开始执行,默认是第一个目标。如果未指定目标,则执行默认目标,通常是 Makefile 文件中的第一个目标。
  • make会根据源文件和目标文件的新旧来判定是否需要重新执行依赖关系进行编译。所以gcc命令不一定总是要执行的。
  • .PHONY:用于声明一个伪目标(Phony Target)总是执行目标下定义的命令。

好了,以上就是本文的全部内容,主要对项目自动构建化工具-make/Makefile一些基本语法和用法进行了介绍。
就到这里吧,再见啦友友们!!!

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