使AC_ARG_WITH影响后续AC_CHECK_HEADERS

时间:2019-06-20 15:03:16

标签: c readline autotools

我有一个默认情况下使用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_LIBSCFLAGS(就像我看到的一些LDFLAGS文件那样):

configure.ac

但这没有帮助。


仅供参考:

autoconf版本= 2.69
automake版本= 1.16.1

1 个答案:

答案 0 :(得分:1)

好的,我知道了。有三个错误:

  1. 应为:

    AS_IF([test x$with_readline != xno],
    

    如果用户设置了路径,则with_readline是该路径,例如/usr/local,所以 not = xyes不会。确实,GNU示例以这种方式显示了这一点。 (我不确定在这里怎么弄错了。)

  2. 仅当用户给出=value时标志的设置才发生 ,即等于xyes

    AS_IF([test x$withval != xyes],
      [
        CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
        LDFLAGS="-L${withval}/lib ${LDFLAGS}"
      ]
    )
    
  3. 如上所述,我也忘记在/include之后添加/lib{withval}