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

How to add directories to the Library search paths for autoconf

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

在Makefile.am中适当设置了AM_CFLAGS和AM_LDFLAGS,代码编译运行成功。

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

中的 26=] 等宏

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

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

对于AC_CHECK_LIB没有这样的安慰,你必须使用ACTION-IF-FOUND(第三个参数)和AC_DEFINE任何需要的东西。

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

我想我误读了原来的问题,但由于我的其他答案本身没有任何错误,我将添加另一个答案。

为了在 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-gettextLIBINTL_LIBS=... 以及配置命令。

鉴于 autoconf 实际上只是 m4,您可以自己将上面的内容包装在宏中。当我们在这里谈论 gettext 时,已经有了这样的东西:AM_GNU_GETTEXT,一个 m4 宏,您可以在调用 gettextize.

后在 configure.ac 中使用它