Como obter variáveis da linha de comando enquanto o makefile está em execução?

3

Como no script bash: leia -p "Apenas UI (y / n)" Temp_Answer. É possível fazer isso enquanto o Makefile está rodando? Porque eu quero fazer base diferente no $ Temp_Answer (Y ou N) no Makefile.

    
por binghenzq 10.12.2013 / 13:59

1 resposta

8

Acessando variáveis do shell

Todas as variáveis de ambiente de shell exportadas são acessíveis da seguinte forma:

$(MYBASEDIR)

Exemplo

Digamos que eu tenha esse Makefile .

$ cat Makefile 
all:
    @echo $(FOO)

Agora sem set de variáveis, grande surpresa, não conseguimos nada:

$ printenv | grep FOO
$

$ make 

$

Com a variável apenas definida, mas não exportada:

$ FOO=bar
$ printenv |grep FOO
FOO=bar

$ export -p | grep FOO
$

$ make 

$

Agora, com uma variável exportada:

$ export FOO
$ export -p | grep FOO
declare -x FOO="bar"

$ make 
bar

Leitura de entrada do usuário

Claro que você pode ler a entrada do usuário dentro de um Makefile. Aqui está um exemplo.

all:

    @echo "Text from env. var.: $(FOO)"
    @echo ""

    @while [ -z "$$CONTINUE" ]; do \
        read -r -p "Type anything but Y or y to exit. [y/N]: " CONTINUE; \
    done ; \
    [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;)
    @echo "..do more.."

Com isso, você pode continuar ou interromper o Makefile :

Exemplo

Pressionar y continuará:

$ make
Text from env. var.: bar

Type anything but Y or y to exit. [y/N]: y
..do more..
$

Pressionar qualquer outra coisa, como n , parará:

$ make
Text from env. var.: bar

Type anything but Y or y to exit. [y/N]: n
Exiting.
make: *** [all] Error 1

Referências

por 10.12.2013 / 14:28