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.