makefile 实例分析 Makefile 语法分析 第一部分 VERSION = 2# 给变量VERSION赋值 PATCHLEVEL = 6# 给变量PATCHLEVEL赋值 SUBLEVEL = 22# 给变量SUBLEVEL赋值 EXTRAVERSION = .6# 给变量EXTRAVERSION赋值 NAME = Holy Dancing Manatees, Batman!# 给变量NAME赋值 # *DOCUMENTATION*# To see a list of typical targets execute "make help"# More info can be located in ./README# Comments in this file are targeted only to the developer, do not# expect to learn how to build the kernel reading this file. # Do not:# o use make's built-in rules and variables# (this increases performance and avoid hard-to-debug behavour);# o print "Entering directory ...";MAKEFLAGS += -rR --no-print-directory# 操作符“+=”的作用是给变量(“+=”前面的MAKEFLAGS)追加值。# 如果变量(“+=”前面的MAKEFLAGS)之前没有定义过,那么,“+=”会自动变成“=”;# 如果前面有变量(“+=”前面的MAKEFLAGS)定义,那么“+=”会继承于前次操作的赋值符;# 如果前一次的是“:=”,那么“+=”会以“:=”作为其赋值符# 在执行make时的命令行选项参数被通过变量 “MAKEFLAGS”传递给子目录下的make程序。# 对于这个变量除非使用指示符“unexport”对它们进行声明,它们在整个make的执行过程中始终被自动的传递给所有的子make。# 还有个特殊变量SHELL与MAKEFLAGS一样,默认情况(没有用“unexport”声明)下在整个make的执行过程中被自动的传递给所有的子make。 《Makefile 语法详解》 Makefile 是在 UNIX 和类 UNIX 系统中用于自动化编译、链接等构建过程的脚本文件。它定义了一系列规则,告诉编译系统如何构建和管理项目。在这个实例中,我们将深入理解 Makefile 的基本语法,特别是变量赋值和特殊变量的使用。 我们看到几个变量的定义,如 `VERSION`、`PATCHLEVEL`、`SUBLEVEL` 和 `EXTRAVERSION`,它们被用来存储软件版本的相关信息。例如,`VERSION = 2` 将变量 `VERSION` 设置为数字 2。这种赋值方式是最常见的,即直接赋值。 然后,我们注意到 `NAME = Holy Dancing Manatees, Batman!`,这将 `NAME` 变量设置为一个字符串。在 Makefile 中,变量可以存储任意类型的数据,包括数字、字符串甚至是复杂的表达式。 文档部分指出,`make help` 是一个常见的目标,用于显示可用的构建任务列表。通常,Makefile 包含了许多预定义的目标,比如 `clean`、`install` 和 `dist`,这些目标各自对应着不同的构建阶段。 接下来,我们看到了 `MAKEFLAGS` 的使用,这是一个特殊变量,用于传递命令行选项给子目录中的 make 程序。`MAKEFLAGS += -rR --no-print-directory` 表示在运行 make 时,增加 `-r`、`-R` 和 `--no-print-directory` 参数。`+=` 是一个增量赋值操作符,如果 `MAKEFLAGS` 之前未定义,它会等同于 `=` 进行赋值;如果已定义,它会根据前一次赋值的方式(如 `:=` 或 `+=`)来决定此次的赋值行为。在这里,`-r` 禁用了内置的隐含规则,`-R` 禁用了内置的变量设置,而 `--no-print-directory` 则防止打印进入目录的信息,以提高效率并避免调试难题。 此外,还有一个类似 `MAKEFLAGS` 的特殊变量 `SHELL`,默认情况下,它也会在 make 运行过程中传递给所有子 make 进程,除非使用 `unexport` 声明来阻止。 `-r` 参数禁止了内置的隐含规则,这样可以提高性能并避免由于隐含规则导致的难以调试的行为。`-R` 参数则禁止了内置的变量设置,使得构建过程更加可控。`--no-print-directory` 参数是为了在递归构建时,减少不必要的输出,使构建过程更加简洁。 `ifdef Vifeq ("$(origin V)", "command line")` 是条件语句,检查是否在命令行中指定了 `V` 变量。如果指定,它将允许更详细的输出,否则,构建过程默认保持较低的输出级别,以更专注于警告信息。 总结起来,Makefile 的语法涉及变量赋值、特殊变量的使用、命令行选项的传递以及条件语句的控制。理解这些基础概念对于编写高效、可维护的构建脚本至关重要。通过熟练掌握 Makefile,开发者可以创建出能够自动化处理复杂构建流程的工具,从而提高工作效率。
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/release/download_crawler_static/4819602/bg1.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4819602/bg2.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4819602/bg3.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4819602/bg4.jpg)
![](https://csdnimg.cn/release/download_crawler_static/4819602/bg5.jpg)
剩余63页未读,继续阅读
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/d3d0807ce10a4219a31e468b23196656_tshl1.jpg!1)
- 粉丝: 4
- 资源: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 打包和分发Rust工具.pdf
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)