¿Por qué configurar tomar variables como argumentos?


10

¿Es VAR=value ./configurelo mismo que ./configure VAR=value?

En el primer caso, el shell establece la variable de entorno y en el segundo el script de configuración toma la cadena 'VAR=value'como argumento, y luego presumiblemente establece la variable. Me pregunto si configure hace algo más con la variable (tal vez ignore o filtre algunos valores), y por qué toma las variables como argumentos en primer lugar.

Respuestas:


12

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 --helpmensaje 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_VARmacro 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_STRINGayudante, 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.


Usted también puede querer para describir cómo env VAR=value ./configurese relaciona conVAR=value ./configure
Kusalananda
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.