GNU make中文手册:递归与MAKEFILES变量解析

需积分: 9 76 下载量 79 浏览量 更新于2024-08-08 收藏 1.29MB PDF 举报
"make的递归-boost.asio c++网络编程(中文版)pdf" 本文档主要探讨了GNU `make` 工具的递归使用和相关变量的应用,特别是`MAKEFILES` 和 `MAKEFILE_LIST` 变量。在C++网络编程中,`make` 是构建和管理项目的重要工具,而`boost.asio` 是一个用于网络编程的库,它提供了异步I/O操作。 `MAKEFILES` 变量在`make` 的递归调用中起着关键作用。这个环境变量通常用来传递信息或指定包含通用规则和变量的文件。然而,直接设置`MAKEFILES` 可能会导致多层`make` 调用时的混乱,因为每一层都会读取该变量指定的文件。因此,不推荐将`login`程序与`MAKEFILES` 相关联,这会导致Makefile在不同的工作环境中无法正常工作。推荐的做法是使用`include`指示符来包含其他Makefile文件。 `MAKEFILE_LIST` 变量则记录了`make` 在读取所有Makefile文件时的列表,包括由`MAKEFILES` 指定、命令行指定、默认的以及通过`include` 包含的文件。通过检查`MAKEFILE_LIST` 的最后一个元素,可以知道当前`make` 正在处理哪个Makefile。例如,一个Makefile可以利用`$(words $(MAKEFILE_LIST))` 和`$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))` 来获取当前处理的文件名。 文档还涵盖了`make` 的基本概念,如Makefile的结构、规则、变量、自动规则推导、目录搜索等。`make` 如何工作、如何指定变量、如何处理通配符和目录搜索都是Makefile编写的关键。`VPATH` 和`vpath` 用于控制依赖文件的搜索路径,而`wildcard` 函数可以帮助获取目录中的文件列表。此外,还讨论了Makefile中的特殊目标,如伪目标、静态模式规则等,这些都是高效构建和管理项目的重要工具。 在C++网络编程中,`make` 与`boost.asio` 结合使用,能够帮助开发者组织复杂的异步网络应用,通过`make` 的规则和变量管理编译过程,同时利用`boost.asio` 提供的接口进行网络通信。理解并熟练掌握`make` 的这些高级特性对于提高开发效率和代码的可维护性至关重要。