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.