循环遍历 m4 的 dumpdef

循环遍历 m4 的 dumpdef

是否可以循环遍历由 给出的宏名称列表dumpdef?我想处理名称中具有特定前缀的某些宏。

答案1

dumpdef将宏列表及其定义写入文件中。在标准m4,该文件是标准错误,因此获取它的唯一方法是使用 m4 脚本外部的重定向。 GNU m4 提供了debugfile宏将输出重定向到可以使用 读回的文件input,但不能依赖 autoconf 中 m4 的特定实现。

即使您设法获取 的输出dumpdef,也未指定输出的格式。您可以使用indexsubstr将字符串分成几行,但这假设实现每行打印一个宏,但不能保证这一点;此外,宏值可以包含换行符。使用 GNU m4,输出是不明确的:你无法区分

define(`foo', `hello')
define(`fooo', `world')

 define(`foo', `hello
 fooo:   world')

假设 m4 实现每行打印一个宏并在名称后面加上冒号,您可以通过这种方式收集潜在的宏名称并用于ifdef检查它们是否确实是宏名称。但是您会受到不使用相同调试打印格式的实现的影响。

解决您的问题的最佳方法可能是在 m4 之外。

相关内容