¿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?

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.


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


6
all:
    echo ${PATH}

O cambie PATH solo por un comando:

all:
    PATH=/my/path:${PATH} cmd
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.