2013-02-07 34 views
0

我想在我的configure.ac中有一個名爲「stdout」的配置選項,它導致將變量定義爲「1」或「0」。以下是我投入configure.ac:autoconf不啓用功能...

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--enable-stdout=no,我得到一個#define WRITETOSTDOUT 0

它將按預期除了--enable-stdout(不帶參數)的結果#define WRITETOSTDOUT 0

另一個觀測中n是,當我輸入configure --enable-std並按它競爭到./configure --enable-stdout=

如何獲得簡單的啓用選項的工作?

回答

1

的祕密是,你應該爲您的shell變量enable_--enable---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頁面有幾個這樣的例子。

+0

看起來更清潔,其中大部分工作...除了兩個小缺陷:config.h中的註釋始終爲「禁用...」,並且製表符完成仍然會給出「=」。第一個是讓我更加困擾的那個... – steffen

+0

第一個很容易修復。我從來沒有嘗試過配置的參數完成。我的環境似乎沒有這樣做。 – ldav1s