Вы можете использовать переменные оболочки в аргументах макроса Autoconf, но это не всегда дает желаемый эффект. Autoconf не расширяет их сам (обычно; здесь есть совсем другая история), но вас может сбить с толку тот факт, что порядок кода в сгенерированном сценарии configure
не соответствует строго порядку макросов в Autoconf ввод. В частности, код для обработки аргументов идет впереди, почти перед всем остальным. Кроме того, ссылки на переменные не используются синтаксически или семантически в сценарии оболочки в некоторых местах, где макросы Autoconf вводят свои аргументы.
Если вам нужен регулируемый параметр, который не чувствителен к переупорядочению вывода или может служить другим способом в контекстах, где переменная оболочки не может, вы, вероятно, ищете макрос или аргумент макроса m4
. Входные данные Autoconf обрабатываются с использованием настраиваемой конфигурации m4
и значительного стека предопределенных макросов, но это все еще входные данные m4
, и вы можете использовать обычные m4
средства. Определение и расширение макросов являются одними из самых фундаментальных из них.
Autoconf переименовывает практически все встроенные функции m4
в пространство имен m4_
, поэтому базовый c define
встроенный будет записан как «m4_define
»:
m4_define([UTIL_BIN_NAME], [foobar])
Определение макроса m4
, такое как это, вступает в силу при обработке, поэтому оно не чувствительно к манипуляциям Autoconf с порядок вывода. Последующие появления UTIL_BIN_NAME
будут расширены Autoconf в соответствии с данным определением, с учетом цитат из . Конечно, вам нужна переменная оболочки для использования с AC_SUBST
и для некоторых других целей, но создать переменную оболочки из макроса не так уж сложно.
Цитирование немного сложно, но это дает желаемый результат (насколько я понимаю) для меня:
m4_define([UTIL_BIN_NAME], [foobar])
# Create a shell variable with the same name and (initial) value as the macro:
[UTIL_BIN_NAME]=UTIL_BIN_NAME
# Note: one could use the (a) macro to customize the names of shell variables
# such as 'build_utils', too, if that were desirable. Details are left as an
# exercise.
AC_ARG_WITH([UTIL_BIN_NAME],
[AS_HELP_STRING([--with-[]UTIL_BIN_NAME],
[build ]UTIL_BIN_NAME[ binary (default=yes)])],
[build_utils=$withval],
[build_utils=yes]
)
# ...
AC_SUBST([UTIL_BIN_NAME])