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?

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.


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


6
all:
    echo ${PATH}

Ou mude o PATH apenas para um comando:

all:
    PATH=/my/path:${PATH} cmd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.