Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将目录添加到库搜索路径以进行autoconf_C_Libraries_Gettext_Autotools_Autoconf - Fatal编程技术网

如何将目录添加到库搜索路径以进行autoconf

如何将目录添加到库搜索路径以进行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

我刚刚开始使用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时搜索的目录?

使用
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我意识到传递环境变量进行配置可能是最好的方法,但我希望有一种方法可以在代码中添加这些非标准库位置。