如何将目录添加到autoconf的库搜索路径

时间:2017-06-13 02:17:46

标签: c libraries gettext autotools autoconf

我刚刚开始使用autotools,并密切关注A. Duret-Lutz的教程,以获得一个使用GNU gettext的C hello世界。

AM_CFLAGS和AM_LDFLAGS在Makefile.am中正确设置,代码编译并成功运行。

问题是autoconf没有搜索AM_CFLAGS和AM_LDFLAGS告诉编译器搜索的目录,因此没有在config.h中定义HAVE_GETTEXT_H,HAVE_LIBINTL等宏。

如何使用configure.ac来补充库并包含它在使用AC_CHECK_LIB和AC_CHECK_HEADERS时搜索的目录?

2 个答案:

答案 0 :(得分:2)

我想我误解了原来的问题,但由于我的其他答案中没有任何内容本身不正确,我会添加另一个答案。

要在AC_CHECK_HEADERAC_CHECK_LIBS中使用自定义路径,必须(暂时)相应地设置CFLAGSLDFLAGS

CFLAGS_backup="${CFLAGS}"
LDFLAGS_backup="${LDFLAGS}"
CFLAGS="-I/path/to/an/additional/include/ ${CFLAGS}"
LDFLAGS="-L/path/to/the/lib/ ${LDFLAGS}"

AC_CHECK_HEADER(...)
AC_CHECK_LIB(...)

## reset CFLAGS and LDFLAGS
CFLAGS="${CFLAGS_backup}"
LDFLAGS="${LDFLAGS_backup}"

AC_CHECK_*范围内,您通常会将GETTEXT_CFLAGSLIBINTL_LIBS设置为变量并将其导出,以分别用于每个AC_SUBST([GETTEXT_CFLAGS])AC_SUBST([LIBINTL_LIBS])的automake。

很遗憾,您无法在configure.ac中访问AM_CFLAGSAM_LDFLAGS

现在在Makefile.am,你可以使用

AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff>
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff>

为方便起见,您通常也会通过AC_ARG_WITHAC_ARG_VAR向用户公开参数,以便他们可以使用--with-gettext或{{1} }以及configure命令。

看到autoconf真的只有m4,你可以自己将上面的内容包装起来。当我们在这里讨论gettext时,已经有了这样的事情:LIBINTL_LIBS=...,你可以在调用AM_GNU_GETTEXT之后在configure.ac中使用的m4宏。

答案 1 :(得分:1)

而不是AC_CHECK_HEADER,使用AC_CHECK_HEADERS来定义HAVE_<HEADER>_H形式的令牌。单数形式希望您使用ACTION-IF-FOUND(第二个参数)自己定义。

对于AC_CHECK_LIB,没有这样的安慰,你必须使用ACTION-IF-FOUND(第三个参数)和AC_DEFINE所需的一切。

此外,还会设置shell变量ac_cv_header_<HEADER>_hac_cv_lib_<LIBRARY>_<FUNCTION>