autoconf - 如何检查包头是否存在?

标签 autoconf automake pkg-config

在 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/

相关文章:

c++ - autoconf:设置 AC_CHECK_LIB 编译器标志

makefile - 你如何 "echo"源目录中的最后一个 configure/make build --options?

c - 如何使用 Automake 编译和安装单个目标文件?

windows - 如何在 .cabal 中指定对外部 C 库的依赖?

variables - 如何从配置中获取完全扩展的变量?

c - Autoconf 问题 : “error: C compiler cannot create executables”

c++ - cmake:如何像 autotool 一样安装 include/and lib/directories

makefile - 如何让automake不那么难看?

ubuntu - 设置一个 debian 包以执行安装操作

cmake - 错误:Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)