【问题标题】:How do I combine AC_SUBST and AC_DEFINE?如何结合 AC_SUBST 和 AC_DEFINE?
【发布时间】:2012-02-02 16:10:51
【问题描述】:

我有一个 configure.ac 文件,其中包含以下行:

AC_DEFINE(CONF_XDISP, ":8", "X screen number")

这些常量在 C 源代码中用于设置编译默认值。我还有一个配置文件conf/bumblebee.conf,需要在其中设置这些默认值。有人告诉我,AC_SUBST 可用于将@CONF_XDISP@ 替换为":8",这样下面的行:

VGL_DISPLAY=@CONF_XDISP@

变成:

VGL_DISPLAY=":8"

为每个AC_DEFINE 创建一个AC_SUBST 行对我来说并不是最好的方法,因为它包含大量重复行。如何组合这些选项,以便我可以使用 AC_DEFINE_SUBST 之类的东西?我们也欢迎其他改进这一点的想法和建议。

【问题讨论】:

    标签: autoconf


    【解决方案1】:

    m4毕竟是一种宏语言,所以类似于

     AC_DEFUN([AC_DEFINE_SUBST], 
       [AC_DEFINE($1,$2,$3) 
        AC_SUBST($1)])
    

    应该可以解决问题。您可能需要稍微摆弄[ 才能正确转义。

    【讨论】:

    【解决方案2】:

    感谢thinton,我可以编写以下代码:

    # AC_DEFINE_SUBST(NAME, VALUE, DESCRIPTION)
    # -----------------------------------------
    AC_DEFUN([AC_DEFINE_SUBST], [
    AC_DEFINE([$1], [$2], [$3])
    AC_SUBST([$1], ['$2'])
    ])
    

    对于AC_DEFINE_SUBST(CONF_XDISP, ":8", "X screen number"),这会生成一个configure 文件,其中包含:

    $as_echo "#define CONF_XDISP \":8 \$PWD\"" >>confdefs.h
    
    CONF_XDISP='":8"'
    

    相关文档:

    【讨论】:

    • 请注意,如果您在AC_SUBST 之前添加缩进,它将显示在生成的configure 代码中。我不知道是否有外壳无法处理,但为了安全,我将留下凹痕。
    • AC_命名空间属于autoconf,所以我建议你使用AX_DEFINE_SUBST
    猜你喜欢
    • 2017-07-08
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2017-01-12
    相关资源
    最近更新 更多