GNU make递归与MAKEFILES变量详解

需积分: 50 47 下载量 109 浏览量 更新于2024-08-08 收藏 1.24MB PDF 举报
"本文档探讨了GNU make工具在递归执行cfd数值模拟时涉及的原理,特别是关于`MAKEFILES`和`MAKEFILE_LIST`变量的使用。在递归调用`make`时,`MAKEFILES`变量用于跨层次的通信,但不建议直接设置此变量,以免造成执行混乱。推荐使用`include`指令来包含其他makefile文件。`MAKEFILE_LIST`变量则记录了make程序读取的所有makefile文件名,通过检查它的最后一个元素,可以确定当前处理的makefile文件。此外,文档还提供了关于GNU make的基本概念,如Makefile的结构、规则、变量和搜索目录等。" 在`make`的递归执行过程中,`MAKEFILES`变量通常用于传递信息,尤其是在多级`make`调用时。然而,直接设置`MAKEFILES`可能会导致意外的结果,因为不同层级的`make`可能会读取同一文件,产生混乱。为了避免这种情况,推荐使用`include`指令来包含其他makefile,这更安全且易于管理。 `MAKEFILE_LIST`变量是`make`的内置变量,它自动收集所有被读取的makefile文件名,包括由`MAKEFILES`环境变量、命令行指定和默认的makefile。通过检查`MAKEFILE_LIST`变量的最后一个元素,可以确定当前`make`正在处理的特定makefile文件。例如,通过`$(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))`可以获取到`include`指令后最近包含的文件名。 在编写Makefile时,理解这些变量的用法对于构建清晰、可维护的构建系统至关重要。例如,可以利用`MAKEFILE_LIST`来追踪包含关系,或者在需要时动态地根据当前处理的makefile执行不同的操作。 此外,文档还涵盖了`make`的基础知识,包括Makefile的结构、规则定义、变量赋值、自动规则、目录搜索等。这些基础知识对于编写有效的Makefile至关重要,特别是对于复杂的项目,如cfd数值模拟,需要精确控制编译和链接步骤。通过理解并应用这些概念,开发者可以创建出高效且适应性强的构建流程。