在 ifdef 中有条件地在 m4 中定义宏
Conditionally defining macro in m4 within ifdef
这是我第一次使用 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 手册页和其他在线文章,我也无法找到解决方案。在 Whosebug 上,我确实参考了以下似乎有一定意义的帖子:
Triple conditional check with ifdef in M4 和
.
然而,我仍然没有取得任何进展。任何指针将不胜感激。
提前致谢!
试试这个:
ifdef(`MANPAGE', `define(_NAME, `NAME')', `define(_NAME, `Name')')
我相信参数在传递给 ifdef
之前会得到扩展
这是我第一次使用 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 手册页和其他在线文章,我也无法找到解决方案。在 Whosebug 上,我确实参考了以下似乎有一定意义的帖子:
Triple conditional check with ifdef in M4 和
然而,我仍然没有取得任何进展。任何指针将不胜感激。
提前致谢!
试试这个:
ifdef(`MANPAGE', `define(_NAME, `NAME')', `define(_NAME, `Name')')
我相信参数在传递给 ifdef