GNU Makefile 中的变量与命令封装技巧

需积分: 44 76 下载量 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 上传