In questo caso
VAR=value ./configure
il comportamento dipende dalla shell corrente, mentre in questo
./configure VAR=value
il comportamento dipende dallo script di configurazione. Alcuni sviluppatori preferiscono quest'ultimo perché vorrebbero scegliere se impostare variabili all'interno dello script, piuttosto che avere qualcuno che imposta magicamente le variabili dello script dall'esterno.
In pratica, c'è poca differenza perché
- la maggior parte delle persone che eseguono la configurazione sono in esecuzione da una shell POSIX, in cui il comportamento precedente "funziona" e
- la maggior parte degli script di configurazione non disinserisce le variabili di ambiente esistenti e
- le variabili d'ambiente convenzionali (al di fuori di automake) hanno un uso consolidato
Ad esempio, il --help
messaggio dello script bash configure mostra questo:
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.
e in ogni caso, in entrambi i casi di impostazione delle variabili opere .
Ma tieni presente le preferenze dello sviluppatore, nel caso in cui qualcuno decida di "migliorare" le cose.
Ulteriori letture:
La AC_ARG_VAR
macro viene utilizzata per dichiarare una particolare variabile (ambiente) come argomento per lo script, dandogli una descrizione e un uso particolare. Sebbene questa funzione sia stata aggiunta relativamente di recente nella storia di autoconf , è davvero importante. Riflettendo la sua presenza più recente, la macro non ha bisogno AS_HELP_STRING
dell'helper e accetta solo due parametri: il nome della variabile e la stringa stampata durante ./configure --help:
AC_ARG_VAR(var-name, help-string)
e continua con un commento sulla pratica di lunga data:
Per impostazione predefinita, configura raccoglie le variabili dall'ambiente come qualsiasi altro script sh. Molti di questi vengono ignorati. Quelli che non lo sono dovrebbero essere dichiarati attraverso questa macro. In questo modo sono contrassegnati come una variabile preziosa.
Una variabile contrassegnata come preziosa viene sostituita in Makefile.in senza dover chiamare un esplicito AC_SUBST
, ma questa non è la parte più importante della definizione. Ciò che è importante è che la variabile sia memorizzata nella cache.
- 7.2 Impostazione delle variabili di output (documentazione di autoconf)
descrive AC_ARG_VAR
, esprimendo nuovamente le preferenze dello sviluppatore .:
Il valore della variabile all'avvio di configure viene salvato nella cache, anche se non è stato specificato sulla riga di comando ma tramite l'ambiente. Infatti, mentre configure può notare la definizione di CC in './configure CC = bizarre-cc', è impossibile notarlo in 'CC = bizarre-cc ./configure', che, sfortunatamente, è ciò che fanno la maggior parte degli utenti.
env VAR=value ./configure
riferisce aVAR=value ./configure