W tym przypadku
VAR=value ./configure
zachowanie zależy od twojej bieżącej powłoki
./configure VAR=value
zachowanie zależy od skryptu konfiguracyjnego. Niektórzy programiści wolą to drugie, ponieważ chcieliby wybrać, czy ustawić zmienne w skrypcie, niż pozwolić komuś magicznie ustawić zmienne skryptu z zewnątrz.
W praktyce różnica jest niewielka, ponieważ
- większość osób wykonujących konfigurację korzysta z powłoki POSIX, gdzie poprzednie zachowanie „po prostu działa” i
- większość skryptów konfiguracyjnych nie wyłącza istniejących zmiennych środowiskowych, oraz
- konwencjonalne zmienne środowiskowe (poza automake) mają ugruntowane zastosowanie
Na przykład --help
komunikat skryptu konfiguracji bash pokazuje to:
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.
i w każdym przypadku działa dowolny sposób ustawienia zmiennej .
Pamiętaj jednak o preferencjach programisty, na wypadek, gdyby ktoś zdecydował się na „ulepszenie” rzeczy.
Dalsza lektura:
AC_ARG_VAR
Makro służy do deklarowania konkretnego zmienną (środowisko) jako argument za scenariusz, nadając mu opis i szczególne zastosowanie. Chociaż ta funkcja została dodana stosunkowo niedawno w historii autoconf , jest bardzo ważna. Odzwierciedlając jego późniejszą obecność, makro nie potrzebuje AS_HELP_STRING
pomocnika i przyjmuje tylko dwa parametry: nazwę zmiennej i ciąg drukowany podczas ./configure --help:
AC_ARG_VAR(var-name, help-string)
i kontynuuje komentarz na temat długoletniej praktyki:
Domyślnie config odbiera zmienne ze środowiska, jak każdy inny skrypt sh. Większość z nich jest ignorowana. Te, które nie są, powinny być deklarowane za pomocą tego makra. W ten sposób są one oznaczone jako cenna zmienna.
Zmienna oznaczona jako szlachetna zostaje zastąpiona w Makefile.in bez konieczności wywoływania jawnego AC_SUBST
, ale to nie jest najważniejsza część definicji. Ważne jest to, że zmienna jest buforowana.
- 7.2 Ustawienie zmiennych wyjściowych (dokumentacja autoconf)
opisuje AC_ARG_VAR
, ponownie wyrażając preferencje programisty:
Wartość zmiennej podczas uruchamiania konfiguracji jest zapisywana w pamięci podręcznej, w tym jeśli nie została podana w wierszu poleceń, ale przez środowisko. Rzeczywiście, chociaż config może zauważyć definicję CC w „./configure CC = bizarre-cc”, nie można tego zauważyć w „CC = bizarre-cc ./configure”, co niestety robi większość użytkowników.
env VAR=value ./configure
odnosi się doVAR=value ./configure