Simplemente no puedes hacer esto. No hay forma de que el proceso de creación pueda cambiar el entorno de su padre (o su directorio actual, en el que podría estar pensando a continuación).
De hecho, está sucediendo incluso menos de lo que piensas.
- No todas las
make
implementaciones reflejan la asignación a la PATH
variable make en el entorno; GNU make (que se encuentra en Linux y otros sistemas) sí, pero BSD make no.
- Cada línea de comando debajo de un objetivo se ejecuta en una subshell separada. (Excepto en algunas implementaciones anteriores de BSD make). Por lo tanto, la
export PATH
línea se ejecuta en un shell que termina inmediatamente después. No es que esta línea esté haciendo algo en primer lugar; si PATH
se define en ese punto, es porque ya está en el entorno del shell.
Make es para construir cosas automáticamente. Si desea establecer variables para su entorno interactivo, esta no es la herramienta que debería mirar. En su lugar, escriba un fragmento de shell y búsquelo en el shell actual:
. ./define-my-variables.sh
En su archivo MAKE, obtenga el script en cada subshell . Puede usar una barra invertida para hacer un comando largo; recuerda eso
- La secuencia de barra invertida-nueva línea se elimina por marca, por lo que el shell no verá una nueva línea allí.
- No obstante, recuerde prefijar cada línea con una pestaña.
- El comportamiento de error de Make es abortar si falla un comando. El shell no lo hará de forma predeterminada, y el fallo de cualquier comando, pero el último pasará desapercibido de forma predeterminada, por lo que debe ejecutar
set -e
.
install:
set -e; \
. ./define-my-variables.sh; \
mkdir -p bin; \
…
¹ Nota obligatoria: de ninguna manera sensata. Incluso invocar de forma remota a chdir
través ptrace
de un depurador no funcionará como lo hace con la mayoría de los shells porque no les gusta que cambien su directorio actual bajo sus pies.
Gilles 'SO- deja de ser malvado'
fuente
No puedes No es posible que un subproceso (como
make
) altere el entorno de su proceso padre.Podrías hacer algo como
Donde se
pathupdate
ve el objetivo:fuente
Su respuesta se puede encontrar aquí: https://stackoverflow.com/a/8942216/367461
Básicamente, debes hacer esto:
Probé esto en Fedora 23 con GNU Make 4.0, y funciona bien para mí.
fuente
.SHELL: name=sh path=/path/to/wrapper-script
y luego crear un script de contenedor comoexport FOO=bar; exec bash "$@"
Estoy a punto de hacer esta misma pregunta porque no pude lograr que el otro ejemplo de respuesta funcione.
Sin embargo, logré lograr la solución de trabajo para mí usando el
eval
comando. No estoy muy seguro de por qué esto no se publicó anteriormente.fuente
export PATH=…
en lado_something:
línea, no es necesarioeval
.Puede hacer que Make se llame recursivamente con un entorno modificado, como tal:
Si desea usar un fragmento de shell:
fuente