GNU Makefile 中的变量与命令封装技巧
需积分: 44 34 浏览量
更新于2024-08-10
收藏 2.1MB PDF 举报
"Makefile中的变量-mapgis10教程"
在Makefile编程中,变量的使用是提高效率和代码复用性的重要手段。本教程聚焦于Makefile中的变量使用,特别是如何定义和使用命令包(command package)以实现命令的封装。
在Makefile中,`--no-print-directory` 是一个命令行选项,它禁止了在执行规则时打印进入和离开目录的信息,这对于大型项目或者频繁切换目录的构建过程来说,可以减少不必要的输出,使构建过程更加简洁。
5.7章节中提到的定义命令包,是为了避免重复编写相同的命令序列。通过`define`指示符,我们可以创建一个命令包,这类似于C语言中的函数,可以在需要的地方调用。例如:
```make
define run-yacc
yacc $(firstword $^)
mv y.tab.c $@
endef
```
在这个例子中,`run-yacc` 就是一个命令包的名字,`define` 和 `endef` 之间的内容是命令包的主体。命令包内的变量如 `$^` 和 `$@` 不会被立即展开,而是作为整体被`run-yacc`变量存储,这与C语言中的宏定义相似。当需要使用这个命令包时,只需直接引用变量名即可。
此外,Makefile中存在多种类型的变量,包括预定义变量、用户自定义变量和自动变量。预定义变量是GNU make自带的,如`CC`用于编译器,`CFLAGS`用于C编译选项等;用户自定义变量则由用户在Makefile中定义,如`OBJECTS`用来存储目标文件列表;自动变量是在规则中根据上下文自动生成的,比如`$@`代表目标文件,`$^`代表所有依赖文件。
关于变量的更多用法,可以在第六章 Makefile中的变量找到详细说明。这些变量可以用来传递参数,控制构建流程,以及简化Makefile的编写。例如,通过变量可以定义一组通用的编译或链接命令,然后在多个规则中复用。
在Makefile的执行过程中,make首先读取并解析Makefile,然后根据规则计算目标文件是否需要更新,并执行相应的命令。这个过程中,变量的值会在适当的时候被展开。对于包含多个Makefile的情况,可以使用`include`指令来包含其他Makefile文件,或者设置环境变量`MAKEFILES`来指定额外的Makefile路径。
Makefile中的变量和命令包是实现自动化构建的关键元素,它们提供了代码复用、流程控制和定制化的能力,使得构建过程更加高效和灵活。通过熟练掌握这些概念和技巧,开发者能够编写出更为精炼和强大的构建脚本。
2024-12-28 上传
2024-12-28 上传
2024-12-28 上传
2024-12-28 上传
2024-12-28 上传
2024-12-28 上传
羊牮
- 粉丝: 41
- 资源: 3855
最新资源
- FactoryMethod.zip_单片机开发_Java_
- react+node.js+mongodb完成的全栈项目(没有使用redux).zip
- Real VMX-开源
- blog-picture:图床
- matlab实现bsc代码-VSA_Toolbox:VSA_Toolbox
- 货币平衡器:在您的存款中平衡货币
- Vibration-Project2.rar_matlab例程_matlab_
- 模板:用于数据分析项目的模板,结构为R包
- typescript-eslint-prettier-jest-example:在打字稿项目中结合eslint漂亮玩笑的示例
- spotmicro
- Free German Dictionary:GNU Aspell的德语单词列表-开源
- ICPBravo Access-crx插件
- lightSAML:SAML 2.0 PHP库
- EKF1.rar_matlab例程_matlab_
- weatherAppFlutter
- remoter:从本地R会话控制远程R会话