在 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

之前会得到扩展