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

klm*_*ion 6 c autoconf autotools gettext libraries

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

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时搜索的目录?

hro*_*tyr 6

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

为了使用自定义路径,AC_CHECK_HEADER必须AC_CHECK_LIBS(暂时)进行CFLAGS相应的设置LDFLAGS

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}"
Run Code Online (Sandbox Code Playgroud)

在其中,AC_CHECK_*您通常将GETTEXT_CFLAGS或设置LIBINTL_LIBS为变量并将它们导出以分别在 automakeAC_SUBST([GETTEXT_CFLAGS])和中使用AC_SUBST([LIBINTL_LIBS])

不幸的是,您无法访问configure.ac中的AM_CFLAGS或。AM_LDFLAGS

现在Makefile.am您可以使用

AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff>
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff>
Run Code Online (Sandbox Code Playgroud)

AC_ARG_WITH为了方便起见,通常,您还会通过或向用户公开一个参数AC_ARG_VAR,以便他们可以将--with-gettextLIBINTL_LIBS=...与配置命令一起使用。

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