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

个人主页:平行线也会相交

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创

收录于专栏【Linux专栏】🎈

本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌

目录

💫文章导读

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

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

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

💫make和Makefile的关系

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

💦make

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

make命令执行后,会自动的在当前目录下寻找Makefile/makefile文件,然后根据Makefile/makefile文件内部对应的依赖关系执行对应的依赖方法形成目标文件。

💦Makefile

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

创建一个Makefile文件:

cpp 复制代码
touch Makefile

编译Makefile文件:

cpp 复制代码
vim Makefile

依赖关系:mycode:test.c。mycode可执行文件之所以能够生成是因为mycode可执行文件依赖于源文件test.c。

但是仅仅有以来关系是不够生成mycode可执行文件的,我们还得有依赖方法。

依赖方法:gcc -o mycode test.c

💦依赖关系

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

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

下面举一个更详细的例子来解释依赖关系:

执行make命令后:

解释:

mycode依赖于mycode.o

mycode.o依赖于mycode.s

mycode.s依赖于mycode.i

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

💦依赖方法


上图中的黄体字就是具体的依赖方法。

💫项目清理(make clean)

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


💫拓展

拓展一:

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


拓展二(特殊符号):

$@ 表示当前目标(Target)
$^ 表示所有的依赖项

💫总结

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

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

相关推荐
HPC_fac1305206781623 分钟前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
yaoxin5211231 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin2 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
sinat_384241096 小时前
使用 npm 安装 Electron 作为开发依赖
服务器
朝九晚五ฺ6 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream6 小时前
Linux的桌面
linux
xiaozhiwise6 小时前
Makefile 之 自动化变量
linux
Kkooe7 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒8 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql