这是我第一次使用m4
,我很难根据是否已经定义了另一个宏来有条件地定义宏。
我面临的问题是test.m4文件中的以下片段:
ifdef(`MANPAGE', define(_NAME, `NAME'), define(_NAME, `Name'))
_NAME
作为C中的一个类比,我试图实现的是这样的东西:
#ifdef MANPAGE
#define _NAME "NAME"
#else
#define _NAME "Name"
#endif
现在,当我运行m4 -DMANPAGE test.m4
时,我会得到Name的输出,而我希望输出是Name。无论是否指定了-DMANPAGE
,我总是得到输出Name。
我不确定自己哪里出了问题,即使在参考了m4手册页和其他在线文章后,我也无法找到解决方案。在StackOverflow上,我确实提到了以下帖子,这些帖子似乎有一些意义:M4和正在转义m4 ifdef语句中的逗号。
然而,我仍然没有取得任何进展。任何建议都将不胜感激。
提前感谢!
试试这个:
ifdef(`MANPAGE', `define(_NAME, `NAME')', `define(_NAME, `Name')')
我相信参数在传递到ifdef
之前已经扩展