Как мне экранировать текст в autoconf / m4? - PullRequest
10 голосов
/ 22 февраля 2010

Следующий код из моего файла configuration.ac не работает (обратите внимание на вложенные квадратные скобки с [default = no] ):

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

Как мне избежать этих скобок?

Ответы [ 3 ]

20 голосов
/ 22 февраля 2010

Нашли это! Из этого учебного пособия:

Аргументы 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"]
)
8 голосов
/ 21 ноября 2012

Brackets являются разновидностями escape-символов, поэтому, как и для '\', вы можете экранировать скобки [] с помощью скобок, например:

AC_ARG_ENABLE (отладка, [--enable-debug build с поддержкой отладки [ [default = no] ] .], [DEBUG = "$ enableval"], [ОТЛАДКА = "нет"] )

Примечание: [ [] default = no [] ] может работать не так, как вы ожидаете, так как m4 должен искать end_bracket с конца. Это должно быть расширено до [ ]default=no[ ].

0 голосов
/ 22 февраля 2010

использовать AC_HELP_STRING

...