Estou tentando incluir alguns env vars em um Makefile. O arquivo env se parece com:
FOO=bar
BAZ=quux
Observe que não há direcionamento export
para cada env var. Se eu adicionar o arquivo principal export
e apenas include
o env no Makefile, tudo funcionará como deveria. Mas preciso manter os ambientes sem liderança export
. Isso me impede de usar apenas include envfile
no Makefile.
Eu também tentei fazer algo assim:
sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env
Mas fazer isso causa um erro, porque o arquivo env não existe para inclusão.
environment-variables
make
Michael Irwin
fonte
fonte
Respostas:
Se você estiver usando o gnu make, o que deve funcionar é incluir o
envfile
arquivo e exportar a lista de vars obtidos do mesmo arquivo:fonte
export $(shell...
linha. Eu só preciso dainclude
linha.Eu tive um problema semelhante e aterrei nesse segmento. Outra solução possível é apenas executar o comando make export sem argumentos:
Isso exportará todas as variáveis make como variáveis de ambiente. Esse comportamento pode ou não corresponder a todos os casos de uso, mas funcionou para mim e não envolveu nenhuma assistente de script de shell.
fonte
Preserva vars ENV pré-existentes
Para correr
fonte
Aqui está uma solução elegante que não importa Make vars, mas define qualquer exportação de ambiente para subprocessos de shell. Pessoalmente, prefiro manter os scripts dinâmicos dos meus perfis.
Existem algumas dicas. Infelizmente, o ENV não funciona, acho que deveria (mas esse é um problema do Bash, não do Make). Também requer realmente outra linha, porque o interpretador de shell padrão do Make é / bin / sh.
No lado superior, isso também permite incluir funções de shell nos scripts Makefile, mas apenas nos scripts de receita. Eu não sei como outras conchas além de Bash se saem. E há um pouco mais acontecendo. Eu coloquei alguns arquivos de teste como GIST .
Existem muitos scripts shell imagináveis. Eu gosto deste Q / A melhor para as respostas simples.
fonte
se seu nome de arquivo for
.makerc
, você poderá incluí-lo no Makefile de maneira simples:Prefiro adicionar
-
sinal antesinclude
, para suprimir todos os avisos.fonte