当宏以与宏之后的字符串相同的字符结尾时,使m4看到宏

时间:2011-07-25 09:31:19

标签: macros m4

我正在开发一个使用M4扩展某些文件的系统,但在某些情况下我遇到了扩展问题。定义/宏命名的约定(如果可能的话,我宁愿不改变)是__<name>__(即双前导和尾随下划线。)所以这扩展正确:

define(`__ROOT__', `/home/mydir')
...
__ROOT__/bin

给出

/home/mydir/bin

但是,

define(`__PREFIX__', `App_Mnemonic')
...
__PREFIX___some_service

应该给:

App_Mnemonic_some_service

但是给出了

__PREFIX___some_service

(即它错过了扩张)

我认为宏的尾部下划线与底层文本的有效下划线之间缺少空格会让m4感到困惑。我能做些什么吗?我可以用静音大括号来界定宏,例如环境变量吗?

1 个答案:

答案 0 :(得分:1)

看起来很简单,我在基础文本中所要做的就是改变这个:

__PREFIX___some_service

为此:

__PREFIX__()_some_service

它看起来有点笨拙,但毕竟它是一个宏,并且不需要改变宏定义。所以这可以保持原样:

define(`__PREFIX__', `App_Mnemonic')