M4 宏处理器
一、m4 是什么? GUN m4 是一种通用的 宏处理器(macro processor),最初是 Unix 标准工具的一部分,后来 GNU 也实现了自己的版本(GNU m4)。 它的名字来自 “macro”,设计思想和 C 语言的预处理器(cpp)类似,但更通用、可编程、与语言无关。 🔧 简单理解: m4 是一个「文本宏展开器」: 它读入文本 → 按定义替换宏 → 输出展开后的文本。 但 m4 比 C 预处理器灵活得多——它本身是一种“小型解释语言”,带有: 宏定义与展开机制; 条件判断(ifdef, ifelse); 循环、递归; 参数替换、字符串操作、文件包含; 可生成任意文本(代码、配置、脚本)。 二、m4 解决了什么问题? 在 1970–80 年代,Unix 世界里还没有复杂的模板引擎、元编程机制,很多项目要面对: 各种 平台差异(操作系统、编译器特性不同); 重复性代码生成; 配置文件或源代码模板 需要根据条件生成; 轻量级宏系统 需要在编译前阶段运行。 m4 的出现正是为了在「正式编译前」进行灵活的文本层面元编程。 三、历史上最典型的用途 1️⃣ autoconf 系统的基础 这是 m4 最著名的应用场景。 GNU 的 autoconf(用于生成 configure 脚本)本质上就是一堆 .m4 宏定义。 configure.ac 文件会通过 autoconf → m4 → 生成最终的 configure。 它负责检测系统特性、生成 Makefile、适配不同环境。 没有 m4,就没有 autoconf。 ...