在 Autoconf 中,当您想检查某些 header 是否存在时,您可以:
AC_CHECK_HEADERS([foo.h])
现在,假设我有一些包 sponge
,pkg-config 知道它,我想知道它是否有一个名为 spongefoo.h
的 header >.
我可以执行以下操作:
PKG_CHECK_MODULES([SPONGE])
CPPFLAGS="$CPPFLAGS $SPONGE_CFLAGS"
AC_CHECK_HEADERS([spongefoo.h])
这可行,但 Autoconf/Automake 文档说(我在括号中添加的内容):
"Sometimes package developers are tempted to set user variables such as 'CFLAGS' [and, I add, 'CPPFLAGS'] because it appears to make their job easier. However, the package itself should never set a user variable, [...] To get around this problem, Automake introduces an automake-specific shadow variable [named AM_CPPFLAGS]"
但是,AC_CHECK_HEADERS() 和其他测试宏不知道 Automake 的影子变量。
那么如何正确检查包是否有某些 header ?
(顺便说一句,AC_CHECK_HEADER() 获得第四个参数“INCLUDES”,但这是逐字的“#include”文本,而不是“-I...”开关,因此它不会对我帮助不大。)
最佳答案
将诸如 CPPFLAGS 这样的用户变量临时设置为某个值并在保留原始值的同时运行编译测试的要求实际上经常发生。这通常在 Autoconf 中使用类似于以下的模式来完成:
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $SPONGE_CFLAGS"
AC_CHECK_HEADERS([spongefoo.h])
CPPFLAGS=$ac_save_CPPFLAGS
请注意,ac_
shell 变量前缀是为 Autoconf 本身非正式保留的,您可能需要使用自己的变量名称,例如 proj_save_CPPFLAGS
。
关于autoconf - 如何检查包头是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23405853/