2016-08-12 4 views
3

у меня есть, как это в MakefileКак я могу передать ENV переменные между делают цели

target1: 
     export var1=test 
     $(MAKE) target2 

target2: 
     echo $(var1) 

Это приходит как пустые

У меня есть другие depencies поэтому я хочу, чтобы установить переменную в первой мишени, а затем все зависимости дети должны иметь возможность получить доступ к этой

EDIT:

.ONESHELL: 

target1: 
     export var1=test 
     echo $(var1) 

OUTP ут

make target1 
export var1=test 
echo 
+0

То, что у вас есть, соответствует правилу https://www.gnu.org/softwar е/сделать/ручной/html_node/Variables_002fRecursion.html. Пожалуйста, разместите минимальный, полный, поддающийся проверке Makefile, который демонстрирует проблему, которую вы видите. – ruakh

+1

'$ (var1)' - это переменная make, а не переменная среды. Вы пытаетесь заставить 'echo $$ {var1}' работать? –

+0

@WilliamPursell жаль, что это была моя ошибка, но она не работала, я пробовал все, что пришло, как 'echo blank'. если я делаю echo $$ {var1}, то он равно пустой – Karl

ответ

6

По умолчанию марки вызывает новую среду оболочки для каждого рецепта, переменная export руются на первой линии не в области видимости второго.

Вы можете это исправить несколькими способами:

Экспорт переменной с export директивы сделать в

target1: export var1 := test 
target1: 
    $(MAKE) target2 

командной строки присваивание переменной использования делают в

target1: 
    $(MAKE) target2 var1=test 

Использование командной оболочки присваивание переменной

target1: 
    var1=test $(MAKE) target2 

Объединить две команды в одном рецепте

target1: 
    export var1=test; $(MAKE) target2 

Force сделать, чтобы пройти все рецепты к одному экземпляру оболочки

.ONESHELL: 

target1: 
    export var1=test 
    $(make) target2 
+0

Я пробовал пример ур и во второй строке я набираю 'echo $ (var1)' он приходит как пустой – Karl

+0

@Karl Post точно, что вы пытались где-то. – user657267

+1

@Karl Какую версию make вы используете? «ONESHELL» был добавлен в 3.82. Если вы используете более старую версию, вам необходимо обновить или использовать один из других методов. – user657267

Смежные вопросы