Neste caso
VAR=value ./configure
o comportamento depende do seu shell atual, enquanto neste
./configure VAR=value
o comportamento depende do script configure. Alguns desenvolvedores preferem o último porque gostariam de escolher se deveriam definir variáveis dentro do script, em vez de fazer com que alguém definisse magicamente as variáveis do script de fora.
Na prática, há pouca diferença porque
- a maioria das pessoas que estão fazendo a configuração está executando a partir de um shell POSIX, em que o comportamento anterior "apenas funciona" e
- a maioria dos scripts de configuração não desanexam variáveis de ambiente existentes e
- as variáveis de ambiente convencionais (fora do automake) têm uso estabelecido há muito tempo
Por exemplo, a mensagem --help
do script de configuração do bash mostra isso:
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 em cada caso, qualquer forma de definir a variável funciona .
Mas tenha em mente as preferências do desenvolvedor, caso alguém decida "melhorar" as coisas.
Leitura adicional:
-
Passando variáveis de ambiente para o
./configure
que afirma que o último (VAR = value) é necessário para colocar o valor emconfig.status
-
3.3. Variáveis de Ambiente como Argumentos
discuteAC_ARG_VAL
, do ponto de vista do automake (e expressa as preferências do desenvolvedor):
The
AC_ARG_VAR
macro is used to declare a particular (environment) variable as an argument for the script, giving it a description and a particular use. While this feature has been added relatively recently in the history of autoconf, it is really important. Reflecting its more recent presence, the macro does not need theAS_HELP_STRING
helper, and only takes two parameters: the name of the variable and the string printed during ./configure --help:
AC_ARG_VAR(var-name, help-string)
e continua com um comentário sobre a prática de longa data:
By default, configure picks up the variables from the environment like any other sh script. Most of those are ignored. Those that are not should be declared through this macro. This way they are marked as a precious variable.
A variable marked as precious gets replaced in the Makefile.in without having to call an explicit
AC_SUBST
, but that's not the most important part of the definition. What is important is that the variable is cached.
-
7.2 Configuração das variáveis de saída (documentação do autoconf)
descreveAC_ARG_VAR
, novamente expressando as preferências do desenvolvedor .:The value of variable when configure was launched is saved in the cache, including if it was not specified on the command line but via the environment. Indeed, while configure can notice the definition of CC in ‘./configure CC=bizarre-cc’, it is impossible to notice it in ‘CC=bizarre-cc ./configure’, which, unfortunately, is what most users do.