如何将目录添加到库搜索路径以进行autoconf
我刚刚开始使用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等宏如何将目录添加到库搜索路径以进行autoconf,c,libraries,gettext,autotools,autoconf,C,Libraries,Gettext,Autotools,Autoconf,我刚刚开始使用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_CHE
如何获取configure.ac来补充库并包括它在使用ac_CHECK_LIB和ac_CHECK_HEADERS时搜索的目录?使用
ac_CHECK_HEADER
,而不是ac_CHECK_HEADERS
,它定义了形式为HAVE_H
的令牌。单数形式要求您使用ACTION-IF-FOUND
(第二个参数)自己定义事物
对于AC\u CHECK\u LIB
没有这样的舒适性,您必须使用ACTION-IF-FOUND
(第三个参数)和AC\u DEFINE
任何需要的内容
此外,还有shell变量
ac\u cv\u header\uu h
和ac\u cv\u lib\uu
集 不要使用AC\u CHECK\u HEADER
,而是使用AC\u CHECK\u HEADERS
,它定义形式为HAVE\u H
的令牌。单数形式要求您使用ACTION-IF-FOUND
(第二个参数)自己定义事物
对于AC\u CHECK\u LIB
没有这样的舒适性,您必须使用ACTION-IF-FOUND
(第三个参数)和AC\u DEFINE
任何需要的内容
此外,还有shell变量
ac\u cv\u header\uu h
和ac\u cv\u lib\uu
集 我想我误读了原来的问题,但由于我的其他答案本身没有错误,我将添加另一个答案
为了在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\u CHECK.*
中,您通常会将GETTEXT\u CFLAGS
或LIBINTL\u LIBS
设置为变量,并将它们导出以用于自动生成每个AC\u SUBST([GETTEXT\u CFLAGS])
和AC\u SUBST([LIBINTL\u LIBS])
不幸的是,您无法访问configure.ac中的AM\u CFLAGS
或AM\u LDFLAGS
现在在Makefile.am
中,您可以使用
AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff>
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff>
AM\u CFLAGS=$(GETTEXT\u CFLAGS)
AM_LDFLAGS=$(GETTEXT_LIBS)
通常,为了方便起见,您还可以通过AC_ARG_WITH
或AC_ARG_VAR
向用户公开参数,这样他们就可以在configure命令中使用--WITH gettext
或LIBINTL_LIBS=…
鉴于autoconf实际上只是m4,您可以自己将上述内容封装在宏中。当我们在这里讨论gettext时,已经有了这样一个东西:
AM_GNU_gettext
,一个m4宏,您可以在configure.ac中使用,在您调用gettextize后,我想我误解了原始问题,但由于我的其他答案本身没有错误,我将添加另一个答案
为了在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\u CHECK.*
中,您通常会将GETTEXT\u CFLAGS
或LIBINTL\u LIBS
设置为变量,并将它们导出以用于自动生成每个AC\u SUBST([GETTEXT\u CFLAGS])
和AC\u SUBST([LIBINTL\u LIBS])
不幸的是,您无法访问configure.ac中的AM\u CFLAGS
或AM\u LDFLAGS
现在在Makefile.am
中,您可以使用
AM_CFLAGS = $(GETTEXT_CFLAGS) <other stuff>
AM_LDFLAGS = $(GETTEXT_LIBS) <other stuff>
AM\u CFLAGS=$(GETTEXT\u CFLAGS)
AM_LDFLAGS=$(GETTEXT_LIBS)
通常,为了方便起见,您还可以通过AC_ARG_WITH
或AC_ARG_VAR
向用户公开参数,这样他们就可以在configure命令中使用--WITH gettext
或LIBINTL_LIBS=…
鉴于autoconf实际上只是m4,您可以自己将上述内容封装在宏中。当我们在这里讨论gettext时,已经有了这样一个东西:AM_GNU_gettext
,一个m4宏,您可以在调用gettextize
后在configure.ac中使用它。您能提供一个例子吗?通常,对于非标准库位置,用户会使用类似于/configure CFLAGS=-I/path/to/gettext/include LDFLAGS=-L/path/to/gettext/lib
的内容,如果调用正确,AC\u CHECK\u HEADERS
和AC\u CHECK\u lib
宏将使用这些内容。例如,请参阅。@ChronoKitsune我意识到传递环境变量进行配置可能是最好的方法,但我希望有一种方法可以在代码中添加这些非标准库位置。您能提供一个示例吗?通常,对于非标准库位置,用户会使用类似于/configure CFLAGS=-I/path/to/gettext/include LDFLAGS=-L/path/to/gettext/lib
的内容,如果调用正确,AC\u CHECK\u HEADERS
和AC\u CHECK\u lib
宏将使用这些内容。例如,请参阅。@ChronoKitsune我意识到传递环境变量进行配置可能是最好的方法,但我希望有一种方法可以在代码中添加这些非标准库位置。