В этом случае
VAR=value ./configure
поведение зависит от вашей текущей оболочки, в то время как в этом
./configure VAR=value
поведение зависит от скрипта configure. Некоторые разработчики предпочитают последнее, потому что они хотели бы выбрать, устанавливать ли переменные в скрипте, а не заставлять кого-то волшебным образом устанавливать переменные скрипта извне.
На практике есть небольшая разница, потому что
- большинство людей, выполняющих настройку, работают из оболочки POSIX, где прежнее поведение «просто работает», и
- большинство скриптов configure не сбрасывают существующие переменные окружения, и
- обычные переменные среды (за пределами automake) имеют давно установленное использование
Например, --help
сообщение скрипта bash configure показывает это:
Some influential environment variables:
DEBUGGER_START_FILE
location of bash debugger initialization file
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
YACC The `Yet Another C Compiler' implementation to use. Defaults to
the first program found out of: `bison -y', `byacc', `yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
default value of `-d' given by some make applications.
и в каждом случае любой способ установки переменной работает .
Но имейте в виду предпочтения разработчика на случай, если кто-то решит «улучшить» вещи.
Дальнейшее чтение:
AC_ARG_VAR
Макрокоманда используется , чтобы объявить конкретную (окружение) переменную в качестве аргумента для сценария, придавая ему описание и конкретного использования. Хотя эта функция была добавлена относительно недавно в истории autoconf , она действительно важна. Отражая свое недавнее присутствие, макрос не нуждается в AS_HELP_STRING
помощнике, а принимает только два параметра: имя переменной и строку, напечатанную во время ./configure --help:
AC_ARG_VAR(var-name, help-string)
и продолжает с комментарием о многолетней практике:
По умолчанию configure выбирает переменные из окружения, как и любой другой сценарий sh. Большинство из них игнорируются. Те, которые не должны быть объявлены через этот макрос. Таким образом, они отмечены как драгоценная переменная.
Переменная, помеченная как драгоценная, заменяется в Makefile.in без необходимости явного вызова AC_SUBST
, но это не самая важная часть определения. Важно то, что переменная кэшируется.
- 7.2 Настройка выходных переменных (документация autoconf)
описывает AC_ARG_VAR
, снова выражая предпочтения разработчика .:
Значение переменной при запуске configure сохраняется в кеше, в том числе, если оно указано не в командной строке, а через среду. Действительно, хотя configure может заметить определение CC в «./configure CC = bizarre-cc», его невозможно заметить в «CC = bizarre-cc ./configure», что, к сожалению, делает большинство пользователей.
env VAR=value ./configure
относится кVAR=value ./configure