In diesem Fall
VAR=value ./configure
Das Verhalten hängt dabei von Ihrer aktuellen Shell ab
./configure VAR=value
Das Verhalten hängt vom Konfigurationsskript ab. Einige Entwickler bevorzugen Letzteres, weil sie entscheiden möchten, ob Variablen innerhalb des Skripts festgelegt werden sollen, anstatt dass jemand die Variablen des Skripts auf magische Weise von außen festlegt.
In der Praxis gibt es da kaum einen Unterschied
- Die meisten Leute, die die Konfiguration durchführen, laufen von einer POSIX-Shell aus, in der das frühere Verhalten "nur funktioniert", und
- Die meisten Konfigurationsskripte setzen vorhandene Umgebungsvariablen nicht zurück
- Die herkömmlichen Umgebungsvariablen (außerhalb von Automake) werden seit langem verwendet
Die --help
Meldung des Bash-Konfigurationsskripts zeigt beispielsweise Folgendes :
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.
und in jedem Fall funktioniert jede Art der Einstellung der Variablen .
Beachten Sie jedoch die Vorlieben des Entwicklers, falls sich jemand entscheidet, Dinge zu "verbessern".
Weiterführende Literatur:
Das AC_ARG_VAR
Makro wird verwendet, um eine bestimmte (Umgebungs-) Variable als Argument für das Skript zu deklarieren und ihm eine Beschreibung und eine bestimmte Verwendung zu geben. Obwohl diese Funktion erst vor relativ kurzer Zeit in der Geschichte von Autoconf hinzugefügt wurde , ist sie wirklich wichtig. Aufgrund seiner neueren Präsenz benötigt das Makro keinen AS_HELP_STRING
Helfer und akzeptiert nur zwei Parameter: den Namen der Variablen und die Zeichenfolge, die während ./configure --help gedruckt wird:
AC_ARG_VAR(var-name, help-string)
und fährt mit einem Kommentar über langjährige Praxis fort:
Standardmäßig nimmt configure die Variablen wie jedes andere sh-Skript aus der Umgebung auf. Die meisten davon werden ignoriert. Diejenigen, die nicht sind, sollten über dieses Makro deklariert werden. Auf diese Weise werden sie als wertvolle Variable markiert.
Eine als wertvoll gekennzeichnete Variable wird in Makefile.in ersetzt, ohne dass eine explizite aufgerufen werden muss. Dies AC_SUBST
ist jedoch nicht der wichtigste Teil der Definition. Wichtig ist, dass die Variable zwischengespeichert wird.
- 7.2 Festlegen von Ausgabevariablen (Autoconf-Dokumentation)
beschreibt AC_ARG_VAR
, wobei wiederum die Präferenzen des Entwicklers zum Ausdruck gebracht werden:
Der Wert der Variablen beim Start von configure wird im Cache gespeichert, auch wenn er nicht in der Befehlszeile, sondern über die Umgebung angegeben wurde. Während configure die Definition von CC in './configure CC = bizarr-cc' bemerken kann, ist es unmöglich, sie in 'CC = bizarr-cc ./configure' zu bemerken, was leider die meisten Benutzer tun.
env VAR=value ./configure
sich aufVAR=value ./configure