【Linux】 自动化编译工具make

本文详细介绍了make工具及其核心文件Makefile的使用,包括Makefile的基本规则、工作原理和五个逐步进阶的示例。通过这些示例,读者将学习如何编写和使用Makefile来自动化编译过程,从而提高开发效率。内容涵盖了目标、依赖关系、命令以及如何根据文件更新执行相应命令等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一:make工具

二:Makefile

三:Makefile基本规则

四:make是如何工作的

五:示例(五个阶段的Makefile)

5.1 第一阶段Makefile

5.2 第二阶段Makefile

5.3 第三阶段Makefile

5.4 第四阶段Makefile

5.5 第五阶段Makefile


一:make工具

人们通常利用 make 工具来自动完成编译工作
这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件
如果某个头文件被修改了,则重新编译所有包含该头文件的源文件
利用这种自动编译可大大简化开发工作,避免不必要的重新编译

二:Makefile

make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作

makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系

当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件 

三:Makefile基本规则

TARGET … : DEPENDENCIES …
  COMMAND
  …
1.目标(TARGET)程序产生的文件,如可执行文件和目标文件 -o;目标也可以是要执行的动作,如“clean”。
2.依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。
3.命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一行。注意:每个命令行的起始字符必须为TAB字符!
如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容

四:make是如何工作的

1、make会在当前目录下找名字叫“Makefile”或“makefile”

2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“main”这个文件,并把这个文件作为最终的目标文件

3、如果main文件不存在,或是main所依赖的后面的 .o 文件的文件修改时间要比main这个文件新,那么,他就会执行后面所定义的命令来生成main这个文件

4、如果main所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件

5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件make的终极任务,也就是执行文件main了

注:如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容 

五:示例(五个阶段的Makefile)

5.1 第一阶段Makefile

第一阶段Makefile示例如下 

示例详细过程:

1.使用vim编辑器 编写makefile             vim xxx

vim makefile

2.执行make                                            make

make

3.删除所有.o文件                                     rm

rm *.o main

4.执行make 一键编译                              make

make

1.查看发现 make编译后又生成.o文件                    ls

ls

2.运行可执行文件                                                    ./main

./main

3.make一键编译[报出已是最新]

   可以修改hello.c  后再make一键编译 

   查看一下编译结果 

1.预览查看makefile[第一阶段的makefile]           cat makefile

cat makefile

2.使用vim编辑器 编写makefile                            vim makefile

vim makefile

3.make已是最新

   make clean(clean组建清除结果查看)

   make 全部重建 

4.预览查看makefile[第一阶段的makefile]            cat makefile

cat makefile

5.2 第二阶段Makefile

第二阶段Makefile(使用变量),示例如下 

示例详细过程:

1.预览查看(第二阶段Makefile)                     cat makefile

cat makefile

2. 查看所有.c文件                                           ls *.c

ls *.c

3.多级目录

创建hello工程文件夹                                 mkdir xxx

mkdir hello

将 hello.c hello.h文件 拷贝到hello文件夹中       cp xxx.c xxx

cp hello.c hello.h hello

5.3 第三阶段Makefile

第三阶段Makefile自动推导,示例如下 

5.4 第四阶段Makefile

第四阶段Makefile自动变量,示例如下 

5.5 第五阶段Makefile

第五阶段Makefile 函数,示例如下 

利用函数:

wildcard    函数查找文件下所有的文件名

patsubst    查找 替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值