Nesse caso
VAR=value ./configure
o comportamento depende do seu shell atual, enquanto neste
./configure VAR=value
o comportamento depende do script de configuração. Alguns desenvolvedores preferem o último porque gostariam de escolher se deseja definir variáveis dentro do script, em vez de ter alguém que magicamente defina as variáveis do script de fora.
Na prática, há pouca diferença porque
- a maioria das pessoas que faz a configuração está executando a partir de um shell POSIX, onde o comportamento anterior "simplesmente funciona" e
- a maioria dos scripts de configuração não desativa as variáveis de ambiente existentes e
- as variáveis de ambiente convencionais (fora da automake) têm uso estabelecido há muito tempo
Por exemplo, a --help
mensagem 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 uma das maneiras de definir a variável funciona .
Mas lembre-se das preferências do desenvolvedor, caso alguém decida "melhorar" as coisas.
Leitura adicional:
A AC_ARG_VAR
macro é usada para declarar uma variável (ambiente) específica como argumento para o script, fornecendo uma descrição e um uso específico. Embora esse recurso tenha sido adicionado há relativamente pouco tempo na história do autoconf , é realmente importante. Refletindo sua presença mais recente, a macro não precisa do AS_HELP_STRING
auxiliar e usa apenas dois parâmetros: o nome da variável e a sequência impressa durante ./configure --help:
AC_ARG_VAR(var-name, help-string)
e continua com um comentário sobre práticas de longa data:
Por padrão, o configure seleciona as variáveis do ambiente como qualquer outro script sh. A maioria deles é ignorada. Aqueles que não são devem ser declarados por meio dessa macro. Dessa forma, eles são marcados como uma variável preciosa.
Uma variável marcada como preciosa é substituída no Makefile.in sem precisar chamar um explícito AC_SUBST
, mas essa não é a parte mais importante da definição. O importante é que a variável seja armazenada em cache.
- 7.2 Configurando variáveis de saída (documentação do autoconf)
descreve AC_ARG_VAR
, novamente expressando as preferências do desenvolvedor .:
O valor da variável quando o configure foi iniciado é salvo no cache, incluindo se não foi especificado na linha de comandos, mas através do ambiente. De fato, enquanto o configure pode perceber a definição de CC em './configure CC = bizarre-cc', é impossível notar em 'CC = bizarre-cc ./configure', que, infelizmente, é o que a maioria dos usuários faz.
env VAR=value ./configure
se relaciona com #VAR=value ./configure