我正在开发一个使用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感到困惑。我能做些什么吗?我可以用静音大括号来界定宏,例如环境变量吗?
答案 0 :(得分:1)
看起来很简单,我在基础文本中所要做的就是改变这个:
__PREFIX___some_service
为此:
__PREFIX__()_some_service
它看起来有点笨拙,但毕竟它是一个宏,并且不需要改变宏定义。所以这可以保持原样:
define(`__PREFIX__', `App_Mnemonic')