2011-07-25 48 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')