0

我想在我的 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])])

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

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

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

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

4

1 回答 1

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页面有一些这样的例子。

于 2013-02-07T22:36:10.810 回答