如何跨文件调用存储在独立文件中的m4宏
m4独立宏文件复用用法说明
m4原生完全支持将通用宏存储在独立文件、处理文档时直接调用的需求,不需要你提到的-f参数,所有符合POSIX标准的m4实现都默认支持按输入顺序加载多文件内容,前序文件定义的宏会在后续所有文件处理流程中生效。
正确使用方式
- 直接将存放通用宏的文件作为第一个输入参数传给m4,后面跟上待处理的源文件即可,命令格式如下:
m4 mymacros.m4 mydoc.pre.txt > mydoc.post.txt
注意事项
- 传入文件的顺序不能颠倒:如果把待处理的
mydoc.pre.txt放在mymacros.m4前面,处理文档内容时宏还未被加载定义,会出现宏名被当做普通文本直接输出的问题。 - 通用的m4运行配置(比如自定义引号规则、屏蔽不需要的内置宏、开启特定兼容模式)可以直接写在
mymacros.m4文件头部,所有加载该宏文件的处理流程都会自动应用这些配置,无需每次在命令行重复传参。 - 这种多文件顺序加载的写法是POSIX标准规定的通用m4用法,不存在跨版本、跨发行版的兼容性问题,比依赖非标准扩展参数的写法更稳定。
效果验证示例
- 在
mymacros.m4中写入宏定义:
define(`COMMON_NOTE', `注:本文档通用提示来自独立公共宏文件')
- 在
mydoc.pre.txt中写入内容:
文档正文开头 COMMON_NOTE 文档正文结尾
- 执行上述处理命令后,
mydoc.post.txt的输出结果为:
文档正文开头 注:本文档通用提示来自独立公共宏文件 文档正文结尾
内容的提问来源于stack exchange,提问作者smilingbuddha
相关产品推荐
相关产品推荐

