autoconf不启用功能...

时间:2013-02-07 22:13:57

标签: autotools configure autoconf

我希望在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-stdout--enable-stdout=yes时,我会收到#define WRITETOSTDOUT 1,当我添加--disable-stdout或{ {1}},我得到--enable-stdout=no

按预期工作 #define WRITETOSTDOUT 0(不含参数)会导致--enable-stdout

另一个观察结果是当我输入#define WRITETOSTDOUT 0并按下它时会竞争configure --enable-std

如何让简单的enable-option工作?

1 个答案:

答案 0 :(得分:1)

秘诀是你应该为enable_ foo --enable- foo命名你的shell变量--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页面有一些例子。