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

use*_*429 11 bash autoconf m4

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

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

我怎么能逃脱这些括号?

use*_*429 20

找到了!从教程:

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

  1. 使用'Quadrigaph'.@ <:@给你[和@:> @给你].
  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"]
)
Run Code Online (Sandbox Code Playgroud)


小智 9

Brackets是一种转义字符,所以当你这样做时'\',你可以[]用括号转义括号,例如:

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

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


Any*_*orn -1

使用 AC_HELP_STRING

  • `AC_HELP_STRING` 大约五年前就已被弃用。使用“AS_HELP_STRING”。 (4认同)
  • 为什么在输出中坚持使用方括号?使用括号;它让你的生活更轻松。 (2认同)