En este caso
VAR=value ./configure
el comportamiento depende de su shell actual, mientras que en este
./configure VAR=value
El comportamiento depende del script de configuración. Algunos de los desarrolladores prefieren este último porque les gustaría elegir si establecer variables dentro del script, en lugar de que alguien establezca mágicamente las variables del script desde afuera.
En la práctica, hay poca diferencia porque
- la mayoría de las personas que realizan la configuración se ejecutan desde un shell POSIX, donde el comportamiento anterior "simplemente funciona", y
- la mayoría de los scripts de configuración no desarman las variables de entorno existentes, y
- Las variables de entorno convencionales (fuera de automake) tienen un uso establecido desde hace mucho tiempo.
Por ejemplo, el --help
mensaje del script de configuración bash muestra esto:
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.
y en cada caso, cualquier forma de establecer la variable funciona .
Pero tenga en cuenta las preferencias del desarrollador, en caso de que alguien decida "mejorar" las cosas.
Otras lecturas:
La AC_ARG_VAR
macro se usa para declarar una variable particular (entorno) como argumento para el script, dándole una descripción y un uso particular. Si bien esta característica se ha agregado relativamente recientemente en la historia de autoconf , es realmente importante. Reflejando su presencia más reciente, la macro no necesita el AS_HELP_STRING
ayudante, y solo toma dos parámetros: el nombre de la variable y la cadena impresa durante ./configure --help:
AC_ARG_VAR(var-name, help-string)
y continúa con un comentario sobre la práctica de larga data:
Por defecto, configure recoge las variables del entorno como cualquier otro script sh. La mayoría de ellos son ignorados. Los que no se deben declarar a través de esta macro. De esta manera se marcan como una variable preciosa.
Una variable marcada como preciosa se reemplaza en Makefile.in sin tener que llamar a un explícito AC_SUBST
, pero esa no es la parte más importante de la definición. Lo importante es que la variable está en caché.
- 7.2 Definición de variables de salida (documentación autoconf)
describe AC_ARG_VAR
, una vez más expresar preferencias del desarrollador .:
El valor de la variable cuando se inició la configuración se guarda en la memoria caché, incluso si no se especificó en la línea de comandos sino a través del entorno. De hecho, mientras configure puede notar la definición de CC en './configure CC = bizarre-cc', es imposible notarlo en 'CC = bizarre-cc ./configure', que, desafortunadamente, es lo que hacen la mayoría de los usuarios.
env VAR=value ./configure
se relaciona conVAR=value ./configure