¿Cómo obtener una variable de entorno de shell en un archivo MAKE?

102

En cáscara cuando entro

echo $demoPath

imprime

/usr/local/demo

¿Cómo puedo obtener el valor de esta variable $demoPathen un archivo MAKE?

Jialin
fuente

Respuestas:

152

Si ha exportado la variable de entorno:

export demoPath=/usr/local/demo

simplemente puede referirse a él por su nombre en el makefile( makeimporta todas las variables de entorno que ha establecido):

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

Si no ha exportado la variable de entorno, no será accesible hasta que la exporte, o a menos que la pase explícitamente en la línea de comando:

make DEMOPATH="${demoPath}" 

Si está utilizando un derivado de shell C, sustituya setenv demoPath /usr/local/demoel exportcomando.

Jonathan Leffler
fuente
3
"Importa todas las variables de entorno que hayas configurado". ¡Funciona! Bien ~, no tenía idea de esto antes, muchas gracias.
Jialin
@jonathan_leffler Me inspiré en tu respuesta e hice algo un poco diferente. He establecido la varentorno antes de llamar maquillaje sin exportarlo: demoPath=/usr/local/demo make. Es posible que desee probarlo y tal vez actualizar su respuesta. ¡Salud!
AD
@AD Sí, ese es otro mecanismo para establecer un valor para una variable de entorno para un comando específico. Es ligeramente tangencial a la pregunta que pregunta cómo acceder al valor de una variable existente, en lugar de cómo crear una sobre la marcha. No deja de ser una técnica útil en ocasiones.
Jonathan Leffler
10

para quienes quieren algún documento oficial que confirme el comportamiento

Las variables de make pueden provenir del entorno en el que se ejecuta make. Cada variable de entorno que make ve cuando se inicia se transforma en una variable make con el mismo nombre y valor. Sin embargo, una asignación explícita en el archivo MAKE, o con un argumento de comando, anula el entorno. (Si se especifica la bandera '-e', los valores del entorno anulan las asignaciones en el archivo MAKE.

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

Dyno Fu
fuente
6
all:
    echo ${PATH}

O cambie PATH solo por un comando:

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