2011-07-25 49 views
2

我正在使用M4扩展某些文件的系统,但我在某些情况下遇到扩展问题。用于定义/宏命名(我宁愿不如果可能的话改变)的约定是__<name>__(即双前端和后端下划线。)因此,这正常展开:使m4看到宏时宏以宏字符结束与字符串跟随宏

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

看似简单,我不得不在底层的文本做的是改变这一点:

__PREFIX___some_service 

此:

__PREFIX__()_some_service 

它看起来有点笨重也许,但它是一个宏毕竟没有必要改变宏定义。所以这可以保持原样:

define(`__PREFIX__', `App_Mnemonic')