Como obter uma variável de ambiente shell em um makefile?

102

Na casca quando eu entro

echo $demoPath

imprime

/usr/local/demo

Como posso obter o valor desta variável $demoPathem um makefile?

Jialin
fonte

Respostas:

152

Se você exportou a variável de ambiente:

export demoPath=/usr/local/demo

você pode simplesmente se referir a ele pelo nome no makefile( makeimporta todas as variáveis ​​de ambiente que você definiu):

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

Se você não exportou a variável de ambiente, ela não estará acessível até que você a exporte ou a menos que você a passe explicitamente na linha de comando:

make DEMOPATH="${demoPath}" 

Se você estiver usando um derivado do shell C, substitua setenv demoPath /usr/local/demoo exportcomando.

Jonathan Leffler
fonte
3
"faz importações de todas as variáveis ​​de ambiente que você definiu". Funciona! Legal ~, eu não tinha ideia sobre isso antes, muito obrigado.
Jialin,
@jonathan_leffler Fiquei inspirado pela sua resposta e fiz algo um pouco diferente. Eu defini o envvar antes de chamar make sem exportá-lo: demoPath=/usr/local/demo make. Você pode querer testá-lo e talvez atualizar sua resposta. Felicidades!
AD
@AD Sim, esse é outro mecanismo para definir um valor para uma variável de ambiente para um comando específico. É um pouco tangencial à questão que pergunta como acessar o valor de uma variável existente, em vez de como criar uma na hora. Isso não impede que seja uma técnica útil na ocasião.
Jonathan Leffler
10

para quem quer algum documento oficial para confirmar o comportamento

Variáveis ​​em make podem vir do ambiente em que make é executado. Cada variável de ambiente que o make vê ao iniciar é transformada em uma variável do make com o mesmo nome e valor. No entanto, uma atribuição explícita no makefile, ou com um argumento de comando, substitui o ambiente. (Se o sinalizador '-e' for especificado, os valores do ambiente substituem as atribuições no makefile.

https://www.gnu.org/software/make/manual/html_node/Environment.html

Dyno Fu
fonte
6
all:
    echo ${PATH}

Ou mude o PATH apenas para um comando:

all:
    PATH=/my/path:${PATH} cmd
g10guang
fonte