如何将目录添加到 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>_h
和 ac_cv_lib_<LIBRARY>_<FUNCTION>
。
我想我误读了原来的问题,但由于我的其他答案本身没有任何错误,我将添加另一个答案。
为了在 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}"
在 AC_CHECK_*
中,您通常将 GETTEXT_CFLAGS
或 LIBINTL_LIBS
设置为变量,并分别根据 AC_SUBST([GETTEXT_CFLAGS])
和 AC_SUBST([LIBINTL_LIBS])
将它们导出用于 automake。
很遗憾,您无法访问 configure.ac 中的 AM_CFLAGS
或 AM_LDFLAGS
。
现在 Makefile.am
您可以使用
AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff>
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff>
为方便起见,通常您还会通过 AC_ARG_WITH
或 AC_ARG_VAR
向用户公开一个参数,以便他们可以使用 --with-gettext
或 LIBINTL_LIBS=...
以及配置命令。
鉴于 autoconf 实际上只是 m4,您可以自己将上面的内容包装在宏中。当我们在这里谈论 gettext 时,已经有了这样的东西:AM_GNU_GETTEXT
,一个 m4 宏,您可以在调用 gettextize
.
后在 configure.ac 中使用它
我刚刚开始使用 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>_h
和 ac_cv_lib_<LIBRARY>_<FUNCTION>
。
我想我误读了原来的问题,但由于我的其他答案本身没有任何错误,我将添加另一个答案。
为了在 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}"
在 AC_CHECK_*
中,您通常将 GETTEXT_CFLAGS
或 LIBINTL_LIBS
设置为变量,并分别根据 AC_SUBST([GETTEXT_CFLAGS])
和 AC_SUBST([LIBINTL_LIBS])
将它们导出用于 automake。
很遗憾,您无法访问 configure.ac 中的 AM_CFLAGS
或 AM_LDFLAGS
。
现在 Makefile.am
您可以使用
AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff>
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff>
为方便起见,通常您还会通过 AC_ARG_WITH
或 AC_ARG_VAR
向用户公开一个参数,以便他们可以使用 --with-gettext
或 LIBINTL_LIBS=...
以及配置命令。
鉴于 autoconf 实际上只是 m4,您可以自己将上面的内容包装在宏中。当我们在这里谈论 gettext 时,已经有了这样的东西:AM_GNU_GETTEXT
,一个 m4 宏,您可以在调用 gettextize
.