深入解析:【Linux】makefile

目录

基本概念:

1、定义

2、工作原理

3、优点

4、三要素

5、语法

目标:依赖(tab) 命令

例子一:

例子二:

makefile 的变量定义和使用

1、自定义变量

2、特殊变量(makefile 内置)

makefile 内置函数和内建语法

伪目标


基本概念:

1、定义

一种项目管理工具,支援管理编译项目,节省编译时间就是​ Makefile 是用于自动化编译程序的脚本材料,利用定义规则来指定如何编译和链接程序,尤其适合多文件计划。

2、工作原理

文件命名:makefile 或者 Makefile,注释使用 #,执行记录:在 makefile 所在路径下执行 make

当执行 `make` 命令时:

1. Make 会在当前目录查找 Makefile 或 makefile
2. 找到第一个目标作为默认目标并执行
3. 检查目标与依赖的时间戳,仅当依赖比目标新时才执行命令

3、优点

1、便捷的编译管理代码,不用每次都写复杂的编译命令

2、大大节省编译时间,减少编译成本

通过3、重用性极强,能够反复使用编译不同的项目

4、三要素

1、目标:完成编译,生成可执行文件
2、依赖:编译需要的文件,源文件、头文件、库文件、资源文件
3、命令:生成可执行文件需要执行的命令

5、语法

目标:依赖
(tab) 命令

例子一:

有文件如下,现生成一个a.c资料的makefile

make:执行,会打印出要执行的命令

例子二:

多个文件的计划写makefile,如下图

把上述过程拆分成编译期和链接期:

为什么说makefile会减少编译时间?

编译过程 =预处理期 + 编译期 + 汇编期+链接期

编译期(把源文件生成.o 文件)+ 链接期(把所有的.o 和库材料链接生成可执行文件)

节省编译时间:采用空间换时间的方式,第一次编译的时候不会节省编译时间,会把生成.o 文件保存下来。

以后,每次检查哪个源文件被修改了,只重新编译被修改的源文件,其他源文件不重新编译,直接使用保存的.o 记录,连接生成可执行文件。

怎么检查哪个源文件被修改了?

比较.c 文件的修改时间和.o 文件的修改时间

注意事项:

1.自顶向下建立依赖关系

2.默认只有一个目标,但可能有多个中间目标,多个目标之间必须有主从关系

makefile 的变量定义和使用

1、自定义变量

无需指定类型,默认都是字符串
变量名允许由字母、数字、下换线构成,只是不能以数字开头
为了与高级语言区分开,一般用大写定义变量名
使用变量 :$(变量名)

makefile 中常用变量:

2、特殊变量(makefile 内置)

$@:表示目标名
$^:表示所有的依赖项
$<:表示第一个依赖项

例子:

makefile 内置函数和内建语法

上一个例子经过修改:

伪目标

不是实际文件,通常用于定义操作,与主目标不同,没有依赖,只有目标和命令

执行:make+功能目标

e.g. make clean

posted @ 2025-11-11 08:21  ycfenxi  阅读(5)  评论(0)    收藏  举报