配置

时间:2016-04-13 16:56:07

标签: autoconf

我有一些自定义autoconf宏,将由多个项目共享。我希望某些AC_ARG_WITH宏取决于项目,因此它们在./configure -h时不显示。例如:

if test $PKG_NAME = proj1; then
    AC_ARG_WITH(foodir, AC_HELP_STRING([--with-foodir=DIR],
        [where foo will come from]),
        foodir=$withval,
        foodir="")
fi

我尝试了m4_ifAS_IF之类的内容,但它不起作用。有没有办法做到这一点,或者我是SOL?

谢谢!

1 个答案:

答案 0 :(得分:0)

所以运气不好,我想。我很感兴趣,所以尝试提出解决方案。我认为这可能是configure.ac

AC_INIT([Autohell], [0.0.1])
AC_PREREQ(2.13)

AC_ARG_ENABLE([extras],[AC_HELP_STRING([--enable-extras],[Enable extra options])],
[
    AS_CASE([$enable_extras],
    [yes],
    [
        AC_ARG_ENABLE([foo],[AC_HELP_STRING([--enable-foo],[Enable the Foo])],
        [
            enable_foo=$enableval
            echo "Foo Enabled"
        ],
        [
            enable_foo="no"
            echo "Foo Disabled"
        ])
    ],
    [
        echo "Extras Disabled"
    ])
],enable_extras="no")

AM_CONDITIONAL([FOO],[test "$enable_foo" = "yes"])

cat << EOF

    Extras:  ${enable_extras}

        Foo: ${enable_foo}

EOF

毋庸置疑,它没有用。 --enable-extras--enable-foo都显示在./configure --help中,并且开关设置的变量是独立的,请查看此示例输出:

$ ./configure

    Extras:  no

        Foo: 

$ ./configure --enable-extras
Foo Disabled

    Extras:  yes

        Foo: no

$ ./configure --enable-extras --enable-foo
Foo Enabled

    Extras:  yes

        Foo: yes

$ ./configure --disable-extras --enable-foo
Extras Disabled...

    Extras:  no

        Foo: yes

输出非常有趣:尽管开关和互补变量已经到位,但条件块仍然受到尊重,所以当我们--enable-foo时我们才能真正--enable-extras