2012-01-04 205 views
4

我有含线configure.ac文件喜欢:如何结合AC_SUBST和AC_DEFINE?

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

这些常数在C源用于设置编译默认值。我还有一个配置文件conf/bumblebee.conf,其中需要设置这些默认值。我听说AC_SUBST可以用来获得@[email protected]":8"使得下面一行取代:

[email protected][email protected] 

变为:

VGL_DISPLAY=":8" 

制作的AC_SUBST线每个AC_DEFINE不看最好的办法对我来说,因为它包括很多线条的重复。我怎样才能结合这些选项,以便我可以使用AC_DEFINE_SUBST之类的东西?其他想法和建议,以改善这一点也是受欢迎的。

回答

5

由于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"' 

相关文档:

+0

请注意,如果您为'AC_SUBST'添加缩进,它将显示在生成的'configure'代码中。我不知道是否有一个外壳不能处理这个问题,但是安全性我只是将这个缩进去掉。 – Lekensteyn 2012-01-04 22:46:01

+2

'AC_'命名空间属于autoconf,所以我建议你使用'AX_DEFINE_SUBST'。 – 2012-01-13 12:01:17

6

m4是一个宏观的语言,毕竟,所以像

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

应该做的伎俩。你可能需要拨弄[才能逃脱。

+0

看起来很有前途,我会尝试一下。参考文档:http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.68/html_node/Macro-Definitions.html#index-AC_005fDEFUN-1585 – Lekensteyn 2012-01-04 20:10:19

+1

我需要添加另一个参数到' AC_SUBST',否则关键字被替换为空字符串。单引号是防止shell解释所必需的。 +1让我走向正确的方向。 – Lekensteyn 2012-01-04 22:44:03