Você simplesmente não pode fazer isso. Não há como: o processo de criação pode alterar o ambiente de seus pais (ou o diretório atual, no qual você pode estar pensando a seguir).
De fato, ainda menos está acontecendo do que você pensa.
- Nem todas as
make
implementações refletem a atribuição à PATH
variável make no ambiente; O GNU make (encontrado no Linux e em outros sistemas) funciona, mas o BSD make não.
- Cada linha de comando sob um destino é executada em um subshell separado. (Exceto em alguns BSD mais antigos, faça implementações.) Portanto, a
export PATH
linha está sendo executada em um shell que termina imediatamente depois. Não que essa linha esteja fazendo algo em primeiro lugar - se PATH
for definida nesse ponto, é porque já está no ambiente do shell.
Make é para construir coisas automaticamente. Se você deseja definir variáveis para o seu ambiente interativo, esta não é a ferramenta que você deveria procurar. Em vez disso, escreva um trecho de shell e origine -o no shell atual:
. ./define-my-variables.sh
No seu makefile, forneça o script em cada subshell . Você pode usar uma barra invertida para fazer um comando longo; lembre-se disso
- A sequência de barra invertida e nova linha é removida pelo make, para que o shell não veja uma nova linha lá.
- Lembre-se de prefixar cada linha com uma guia.
- O comportamento do erro de Make é abortar se um comando falhar. O shell não fará isso por padrão, e a falha de qualquer comando, mas o último passará despercebido por padrão, portanto, você precisa executar
set -e
.
install:
set -e; \
. ./define-my-variables.sh; \
mkdir -p bin; \
…
¹ Nota obrigatória: não há maneira sã. Mesmo invocando remotamente chdir
via ptrace
de um depurador não funcionará como na maioria dos shells, porque eles não gostam de ter seu diretório atual alterado.
Gilles 'SO- parar de ser mau'
fonte
Você não pode. Não é possível que um subprocesso (como
make
) altere o ambiente do processo pai.Você poderia fazer algo como
Onde o
pathupdate
destino se parece:fonte
Sua resposta pode ser encontrada aqui: https://stackoverflow.com/a/8942216/367461
Basicamente, você deve fazer isso:
Eu testei isso no Fedora 23 com o GNU Make 4.0, e funciona bem para mim.
fonte
.SHELL: name=sh path=/path/to/wrapper-script
e, em seguida, fazer um script wrapper comoexport FOO=bar; exec bash "$@"
Estou prestes a fazer a mesma pergunta porque não consegui que o outro exemplo de resposta funcionasse.
No entanto, consegui obter a solução de trabalho para mim usando o
eval
comando Não sei ao certo por que isso não foi publicado anteriormente.fonte
export PATH=…
em jogodo_something:
, você não precisaeval
.Você pode fazer com que o Make se chame recursivamente com um ambiente modificado, como:
Se você deseja usar um snippet de shell:
fonte