我有一个默认情况下使用readline库的程序(除非用户使用--without-readline
专门禁用了它)。用户还可以使用--with-readline=
(例如--with-readline=/usr/local
)为readline标头和库指定备用位置。
当然,仅仅因为用户没有禁用readline或指定备用位置就意味着readline标头和库实际上存在于系统上(或用户声明的位置),所以我想检查一下实际的如果未禁用,则存在readline。
我正在跟踪上一个使用AC_ARG_WITH
的示例here,但是后来在我的configure.ac
文件中,我这样做了:
AC_CHECK_HEADERS([readline/readline.h readline/history.h])
# ...
AC_SEARCH_LIBS([readline],[readline])
但是,给予:
./configure --with-readline=/usr/local
导致:
checking readline/readline.h usability... no
checking readline/readline.h presence... no
checking for readline/readline.h... no
checking readline/history.h usability... no
checking readline/history.h presence... no
checking for readline/history.h... no
看着config.log
:
configure:6517: checking readline/readline.h usability
configure:6517: gcc -std=gnu99 -std=gnu99 -c -g -O2 conftest.c >&5
conftest.c:80:31: error: readline/readline.h: No such file or directory
调用gcc
不会 具有-I/usr/local/include
,所以在 course 中找不到它。
所以问题是:在执行configure
和{{1时,如何添加gcc
(或用户指定的任何位置),如何使-I/usr/local/include
来调用AC_CHECK_HEADERS
}}?
我确实尝试显式地自己扩充AC_SEARCH_LIBS
和CFLAGS
(就像我看到的一些LDFLAGS
文件那样):
configure.ac
但这没有帮助。
仅供参考:
autoconf版本= 2.69
automake版本= 1.16.1
答案 0 :(得分:1)
好的,我知道了。有三个错误:
行应为:
AS_IF([test x$with_readline != xno],
如果用户设置了路径,则with_readline
是该路径,例如/usr/local
,所以 not = xyes
不会。确实,GNU示例以这种方式显示了这一点。 (我不确定在这里怎么弄错了。)
仅当用户给出=value
时标志的设置才发生 ,即不等于xyes
:
AS_IF([test x$withval != xyes],
[
CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
LDFLAGS="-L${withval}/lib ${LDFLAGS}"
]
)
如上所述,我也忘记在/include
之后添加/lib
和{withval}
。