13

我的 configuration.ac 文件中的以下代码不起作用(注意带有[default=no]的嵌套方括号):

AC_ARG_ENABLE(debug,
    [  --enable-debug          build with debugging support [default=no].],
    [DEBUG="$enableval"],
    [DEBUG="no"]
)

我怎样才能逃脱那些括号?

4

3 回答 3

22

找到了!从教程:

M4 参数用 [ 和 ] 引用。没有办法逃避这些,但是,如果你想插入 ['s 或 ]'s,你有几个选择:

  1. 使用“四边形”。@<:@ 给你 [ 和 @:>@ 给你 ]。
  2. 平衡你的报价。M4 会将 [[]] 变成 []。小心在宏的参数中使用它。有时,您还需要双引号 ([[[]]])。
  3. 使用以下命令更改引用:changequote(<<,>>) 将引用更改为 << 和 >>。autoconf 文档(在我看来是正确的)警告不要(过度)使用它,因为它可能导致意想不到的结果。
  4. 尽可能避免使用 [ 和 ]。这是我个人的选择。

因此,我的新代码是:

AC_ARG_ENABLE(debug,
    AS_HELP_STRING(
        [--enable-debug],
        [build with debugging symbols @<:@default=no@:>@]),
    [enable_debug="$enableval"],
    [enable_debug="no"]
)
于 2010-02-22T07:21:03.030 回答
9

Brackets是一种转义字符,所以就像你做的那样'\',你可以用括号转义括号[],例如:

AC_ARG_ENABLE(debug, [ --enable-debug build with debug support [ [default=no] ] .], [DEBUG="$enableval"], [DEBUG="no"] )

注意:[ [ ]default=no[ ] ]可能无法按预期工作,因为 m4 应该从末尾搜索 end_bracket。它应该被扩展为[ ]default=no[ ].

于 2012-11-21T12:22:13.783 回答
0

使用 AC_HELP_STRING

于 2010-02-22T04:09:47.963 回答