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. `Quadrigraph'を使用します。@<:@ は [ を、@:>@ は ] を与えます。
  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 デバッグをサポートするビルド[ [default=no] ] .], [DEBUG="$enableval"], [DEBUG="no"] )

注: [ [ ]default=no[ ] ]は、m4 が end_bracket を最後から検索する必要があるため、期待どおりに機能しない場合があります。に展開する必要があります[ ]default=no[ ]

于 2012-11-21T12:22:13.783 に答える