Подстановка строковой переменной "Help" для "configure --help"

У меня есть строка, которую я хочу использовать несколько раз для вывода configure --help, Поэтому я пытаюсь сделать что-то подобное в configure.ac:

AC_ARG_ENABLE([foobar],
              AS_HELP_STRING([--enable-foobar], [$foobar_help_str]))

Но никакого расширения или замены не делается, поэтому вывод просто $foobar_help_str,

2 ответа

Решение

Определите строку как макрос M4:

m4_define([FOOBAR_HELP_STR], [Turn on the foobar features])
AC_ARG_ENABLE([foobar], [AS_HELP_STRING([--enable-foobar], FOOBAR_HELP_STR)])

К вашему сведению, если вы посмотрите на сгенерированный configure В сценарии вы увидите, что текст справки предварительно отформатирован в один фрагмент текста в цитируемом документе "здесь" (отправляется на стандартный вывод cat), т.е. нет никакой возможности для какой-либо формы подстановки во время выполнения скрипта (т.е. когда вы запускаете его как ./configure --help). Без сомнения, можно утверждать, что это ошибка, но с другой стороны, поскольку обработка выполняется autoconf красивая печать текста справки выполняется без знания того, как будет выполняться финальный скрипт, и, следовательно, без представления, какие переменные могут быть установлены и какой диапазон значений они могут принимать, autoconf не имеет возможности узнать, сколько места выделяется при форматировании текста справки для любых значений, которые может иметь любая переменная во время выполнения.

Для случаев, когда желательны только бинарные опционы (т.е. где [=ARG] эта функция не используется / не нужна), тогда должна быть возможность написать макрос умной обертки, который будет генерировать соответствующий текст справки на основе настроек по умолчанию, если это значение по умолчанию само сначала определено как макрос M4 способом, подобным тому, что предлагалось в принятом ответе.

Другие вопросы по тегам