【问题标题】:How to check for the existence of a header of a package?如何检查包头是否存在?
【发布时间】:2014-06-17 19:44:18
【问题描述】:

在 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 特定的影子变量 [named AM_CPPFLAGS]"

但是,AC_CHECK_HEADERS() 和其他测试宏不知道 Automake 的影子变量。

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

(顺便说一句,AC_CHECK_HEADER() 得到了第 4 个参数,“INCLUDES”,但这是一个逐字的 '"#include"' 文本,而不是 '"-I..."' 开关,所以它没有'对我帮助不大。)

【问题讨论】:

    标签: autoconf automake pkg-config


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      相关资源
      最近更新 更多