заставить 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. Могу ли я что-нибудь с этим сделать? Могу ли я разграничить макрос молчаливыми фигурными скобками, например, как переменные среды?


person Component 10    schedule 25.07.2011    source источник


Ответы (1)


Обманчиво просто на самом деле, все, что мне нужно было сделать в базовом тексте, это изменить это:

__PREFIX___some_service

за это:

__PREFIX__()_some_service

Возможно, это выглядит немного неуклюже, но в конце концов это макрос, и нет необходимости менять определение макроса. Так что это может остаться как есть:

define(`__PREFIX__', `App_Mnemonic')
person Component 10    schedule 25.07.2011