【问题标题】:How to add directories to the Library search paths for autoconf如何将目录添加到 autoconf 的库搜索路径
【发布时间】:2017-06-13 02:17:46
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你能举个例子吗?通常,用户会使用 ./configure CFLAGS=-I/path/to/gettext/include LDFLAGS=-L/path/to/gettext/lib 之类的东西作为非标准库位置,如果我没记错的话,那些将被 AC_CHECK_HEADERSAC_CHECK_LIB 宏使用。例如,请参阅this answer
  • @ChronoKitsune 我意识到将环境变量传递给配置可能是最好的方法,但我希望有一种方法可以在代码中添加那些非标准库位置。

标签: c libraries gettext autotools autoconf


【解决方案1】:

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

为了在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 中使用它。

【讨论】:

    【解决方案2】:

    使用AC_CHECK_HEADERS 代替AC_CHECK_HEADER,它定义了HAVE_&lt;HEADER&gt;_H 形式的标记。单数形式希望您使用ACTION-IF-FOUND(第二个参数)自己定义事物。

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

    另外还会设置 shell 变量 ac_cv_header_&lt;HEADER&gt;_hac_cv_lib_&lt;LIBRARY&gt;_&lt;FUNCTION&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 2022-12-13
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多