Я хочу сделать немедленное расширение команды оболочки в Makefile, но я хочу, чтобы команда оболочки имела доступ к переменным среды в Makefile. Если я использую $ (shell ...), он немедленно расширяется, но нет доступа к переменным. Если я использую backquotes, расширение не является немедленным, и это вызывает проблемы для меня позже в Makefile. Мне интересно, если есть какой-либо способ немедленного развертывания backquotes или передать текущую среду команде $ (shell).Экспорт переменных среды в оболочку Makefile
Например, следующий Makefile:
SOME_VAR := some_val
export SOME_VAR
VAR1 := `echo $$SOME_VAR`
export VAR1
VAR2 := `echo $$VAR1`
all:
@echo VAR1=$(VAR1)
@echo VAR2=$(VAR2)
Выведет:
~/tmp/t2> make
VAR1=some_val
VAR2=`echo $SOME_VAR`
Где я хочу, чтобы напечатать "VAR2 = some_val". Реальный пример немного сложнее (переменные окружения унаследованы от родительских make-файлов, и я пытаюсь использовать Perl-скрипт для редактирования переменных), но принцип тот же.
Любая помощь приветствуется.
Ммм ... да, мой пример был испорчен. ..В приведенном выше примере VAR1 расширяется в Makefile, но мне нужно, чтобы VAR1 расширялся в сценарии оболочки. То есть, я вызываю скрипт perl, которому необходимо получить доступ к ENV {'VAR1'}. Если вызывается из $ (shell ...), скрипт не будет знать, что такое VAR1. Я отредактирую свой вопрос с лучшим примером. Благодарю. – John
@ Джон, я действительно не понимаю, что вы пытаетесь сделать здесь. Я мог бы сделать несколько догадок, но я думаю, что это будет быстрее, если вы отредактируете свой вопрос. – Beta
То, что я действительно пытаюсь сделать: У меня есть файл makefile, который должен создать объектный файл и называть его в соответствии с настройками конфигурации, с которыми он был построен. У меня есть скрипт perl, который переводит настройки конфигурации в имя. Чтобы это работало, скрипт perl должен иметь доступ к настройкам конфигурации (для этого нужно использовать обратные кавычки). Это было бы прекрасно само по себе, но тогда имя должно использоваться в другом скрипте perl. Поскольку имя не расширяется к моменту запуска второго скрипта, это вызывает ошибку. Я ищу обходной путь. – John