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

发布于 2024-08-22 13:45:51 字数 269 浏览 10 评论 0原文

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

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

如何转义这些括号?

The following code from my configuration.ac file does not work (note the nested square brackets with [default=no]):

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

How can I escape those brackets?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苍白女子 2024-08-29 13:45:51

找到了!来自教程:

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"]
)

Found it! From this tutorial:

M4 arguments are quoted with [ and ]. There is NO WAY to escape these, however, you have several options if you wish to insert ['s or ]'s:

  1. Use a `Quadrigraph'. @<:@ gives you [ and @:>@ gives you ].
  2. Balance your quotes. M4 will turn [[]] in to []. Beware of using this in arguments to macros. Sometimes, you need to double quote as well ([[[]]]).
  3. Change the quoting using: changequote(<<,>>) to change the quoting to << and >>. The autoconf documentation (rightly, in my opinion) warns against the (over) use of this, since it can lead to unexpected results.
  4. Avoid [ and ] where ever possible. This is my personal choice.

My new code is therefore:

AC_ARG_ENABLE(debug,
    AS_HELP_STRING(
        [--enable-debug],
        [build with debugging symbols @<:@default=no@:>@]),
    [enable_debug="$enableval"],
    [enable_debug="no"]
)
年少掌心 2024-08-29 13:45:51

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

AC_ARG_ENABLE(调试,
[ --enable-debug 构建,支持调试[[default=no]]。],
[DEBUG=“$enableval”],
[调试=“否”]

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

Brackets are kind of escape characters, so as you do for '\', you may escape brackets [] with brackets, eg :

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

Note: [[ ]default=no[ ]] may not work as you expect as m4 should search the end_bracket from the end. It should so be expanded to [ ]default=no[ ].

等往事风中吹 2024-08-29 13:45:51

使用 AC_HELP_STRING

use AC_HELP_STRING

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文