如何检查包的标头是否存在?

时间:2014-05-01 10:21:39

标签: autoconf automake pkg-config

在Autoconf中,如果要检查是否存在某些标题,请执行以下操作:

AC_CHECK_HEADERS([foo.h])

现在,让我们假设我有一些包,sponge,其中pkg-config知道,我想知道它是否有一个名为spongefoo.h的标题。

我可以做以下事情:

PKG_CHECK_MODULES([SPONGE])
CPPFLAGS="$CPPFLAGS $SPONGE_CFLAGS"
AC_CHECK_HEADERS([spongefoo.h])

这可行,但Autoconf / Automake文档说(我在括号中添加):

  

“有时包开发人员很想设置用户变量,例如'CFLAGS'[和我添加'CPPFLAGS'],因为它似乎使他们的工作更容易。但是,包本身不应该设置用户变量,[ ...]为了解决这个问题,Automake引入了一个特定于automake的阴影变量[名为AM_CPPFLAGS]“

但是,AC_CHECK_HEADERS()和其他测试宏不了解Automake的阴影变量。

那么如何正确检查包是否有一些标题?

(BTW,AC_CHECK_HEADER()获得第4个参数,“INCLUDES”,但这是一个逐字的'“#include”'文本,而不是'“-I ...”'切换,所以它没有'帮帮我。)

1 个答案:

答案 0 :(得分:1)

临时将用户变量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