【问题标题】:autoconf doesn't enable feature...autoconf 不启用功能...
【发布时间】:2013-02-07 22:13:56
【问题描述】:

我想在我的 configure.ac 中有一个名为“stdout”的配置选项,这导致将变量定义为“1”或“0”。这是我放入 configure.ac 的内容:

 AC_ARG_ENABLE([stdout],
   [AS_HELP_STRING([--enable-stdout[=yes/no], --disable-stdout],
     [Enable or disable output to stdout. Default is disabled.])],
   [ if test "x$enableval" = "yes" ; then
       AC_DEFINE([WRITETOSTDOUT],[1],[Enable output to stdout])
     else
       AC_DEFINE([WRITETOSTDOUT],[0],[Disable output to stdout])
     fi ],
   [AC_DEFINE([WRITETOSTDOUT],[0],[Enable output to stdout])])

我期望的是,当我将选项 --enable-stdout--enable-stdout=yes 添加到 configure 时,我得到一个 #define WRITETOSTDOUT 1,当我添加 --disable-stdout--enable-stdout=no 时,我得到一个 #define WRITETOSTDOUT 0

它按预期工作除了--enable-stdout(不带参数)导致#define WRITETOSTDOUT 0

另一个观察结果是,当我输入 configure --enable-std 并按下它时,它会与 ./configure --enable-stdout= 竞争

如何让简单的启用选项起作用?

【问题讨论】:

    标签: autotools configure autoconf


    【解决方案1】:

    秘诀是你应该将你的 shell 变量命名为 enable_foo--enable-foo--disable-foo。所以:

    AC_ARG_ENABLE([stdout],
     [AS_HELP_STRING([--enable-stdout=yes|no],
                     [Enable or disable output to stdout. Default is disabled.])],
     [enable_stdout="$enableval"],
     [enable_stdout="no"])
    
     ...
     stdout_val=0
     if test "x$enable_stdout" = "xyes" ; then
       stdout_val=1
     fi
     AC_DEFINE_UNQUOTED([WRITETOSTDOUT],[$stdout_val],[Enable output to stdout])
    

    Autotools Mythbuster 页面有几个这样的例子。

    【讨论】:

    • 看起来更干净,而且大部分工作...除了两个小缺陷:config.h 中的注释始终是“禁用...”并且制表符完成仍然给出一个“= ”。第一个是更困扰我的...
    • 第一个很容易修复。我从未尝试过配置参数完成。我的环境似乎没有这样做。
    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多