如何检测m4宏是否存在/是否可以调用
How to detect if a m4 macro exists / can be called
我们正在开发一个使用 autotools(准确地说是 autoconf 2.69 和 automake 1.13.3)的软件包。这个包需要 wxwidgets 并且这个库提供了它自己的 m4 文件以允许在最终安装系统中测试 wxwidgets 的安装。 wxwidgets 最近将版本从 2.8 更改为 3.0,在此更改中,他们还更改了用于确定可用性的宏(即宏从 AM_PATH_WXCONFIG 更改为 WX_CONFIG_CHECK)及其参数化。这也意味着如果我们从我们的包分发源代码并且外部开发人员想要重建配置,那么 configure.ac 文件应该知道应该使用两者中的哪一个。
所以问题是:我们的包是否有机会在执行前检查 m4 宏是否存在?如果那不可能,那么我们是否应该将 wxwidgets 中的 m4 文件包含到我们的包中?
正如您在评论中所建议的那样,使用 m4_ifdef
:
m4_ifdef([AM_PATH_WXCONFIG], [
AM_PATH_WXCONFIG(parameters)
], [
m4_ifdef([WX_CONFIG_CHECK], [
WX_CONFIG_CHECK(parameters)
], [
AC_MSG_ERROR([You need to install the wxWidgets development package.])
])
])
我们正在开发一个使用 autotools(准确地说是 autoconf 2.69 和 automake 1.13.3)的软件包。这个包需要 wxwidgets 并且这个库提供了它自己的 m4 文件以允许在最终安装系统中测试 wxwidgets 的安装。 wxwidgets 最近将版本从 2.8 更改为 3.0,在此更改中,他们还更改了用于确定可用性的宏(即宏从 AM_PATH_WXCONFIG 更改为 WX_CONFIG_CHECK)及其参数化。这也意味着如果我们从我们的包分发源代码并且外部开发人员想要重建配置,那么 configure.ac 文件应该知道应该使用两者中的哪一个。
所以问题是:我们的包是否有机会在执行前检查 m4 宏是否存在?如果那不可能,那么我们是否应该将 wxwidgets 中的 m4 文件包含到我们的包中?
正如您在评论中所建议的那样,使用 m4_ifdef
:
m4_ifdef([AM_PATH_WXCONFIG], [
AM_PATH_WXCONFIG(parameters)
], [
m4_ifdef([WX_CONFIG_CHECK], [
WX_CONFIG_CHECK(parameters)
], [
AC_MSG_ERROR([You need to install the wxWidgets development package.])
])
])