Linux操作系统:Makefile

本文介绍了Makefile在Linux操作系统中的作用和工作原理,包括Makefile的规则定义、示例、工作流程以及Makefile中变量的使用。通过一个包含多个C文件的工程实例,展示了如何编写和组织Makefile,确保编译效率。文章还探讨了make的工作方式,强调了文件依赖性和命令执行的条件,以及Makefile的易维护性,如使用变量简化Makefile的修改。
摘要由CSDN通过智能技术生成

Linux操作系统

前言

本文内容为自己学习笔记,部分内容来源于陈皓–《跟我一起写makefile》
有表述不详之处请自行去阅读本书

一、Makefile是什么?

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

二、

1.Makefile 的规则

target … : prerequisites …
command


target 也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标
签(Label),prerequisites 就是,要生成那个 target 所需要的文件或是目标。 command 也就是 make 需要执行的命令。(任意的 Shell 命令)
这是一个文件的依赖关系,也就是说,target 这一个或多个的目标文件依赖于 prerequisites
中的文件,其生成规则定义在 command 中。说白一点就是说,prerequisites 中如果有一个以上的文件比 target 文件要新的话,command 所定义的命令就会被执行。这就是 Makefile 的规则。也就是 Makefile 中最核心的内容。

2.示例

如果一个工程有 1 个头文件,和 8 个 C 文件,我们为了完成前面所述的
那三个规则,我们的 Makefile 应该是下面的这个样子的。

在这里插入图片描述

这样比较便于 Makefile 的易读。我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”就可以生成执行文件 edit。如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下“make clean”就可以了。

在这个 makefile 中,目标文件(main)包含:执行文件 main和中间目标文件(*.o),依赖文件(prerequisites)就是冒号后面的那些 .c 文件和 .h 文件。每一个 .o 文件都有一组依赖
文件,而这些 .o 文件又是执行文件 main 的依赖文件。依赖关系的实质上就是说明了目标
文件是由哪些文件生成的,换言之,目标文件是哪些文件更新的。

在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一
个 Tab 键作为开头。记住,make 并不管命令是怎么工作的,他只管执行所定义的命令。make会比较 targets 文件和 p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值