如何在autoconf / m4中转义文本?

时间:2010-02-22 04:04:05

标签: bash autoconf m4

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

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

如何逃避这些括号?

3 个答案:

答案 0 :(得分:20)

发现它!来自this教程:

  

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

     
      
  1. 使用'Quadrigaph'。 @<:@给你[和@:> @给你]。
  2.   
  3. 平衡报价。 M4将[[]]变为[]。小心在宏的参数中使用它。有时候,你也需要加倍引用([[[]]]。
  4.   
  5. 使用以下命令更改引用:changequote(<<,>>)将引用更改为<<和>>。 autoconf文档(正确地,在我看来)警告不要(过度)使用它,因为它可能导致意想不到的结果。
  6.   
  7. 尽可能避免[和]。这是我个人的选择。
  8.   

因此我的新代码是:

AC_ARG_ENABLE(debug,
    AS_HELP_STRING(
        [--enable-debug],
        [build with debugging symbols @<:@default=no@:>@]),
    [enable_debug="$enableval"],
    [enable_debug="no"]
)

答案 1 :(得分:8)

Brackets是一种转义字符,因此与'\'一样,您可以使用括号转义括号[],例如:

  

AC_ARG_ENABLE(调试       [ - enable-debug build with debugging support [ [default = no] ] 。],       [DEBUG = “$ enableval”],       [DEBUG = “否”]       )

注意: [ []默认=否[] ] 可能无法正常工作,因为m4应该从末尾搜索end_bracket。它应该扩展到[ ]default=no[ ]

答案 2 :(得分:0)

使用AC_HELP_STRING