Как я упоминал в некоторых комментариях, моя настоящая цель состояла в том, чтобы заставить скрипт генерировать имена файлов на основе настроек, с которыми компилировался объект. Затем мне нужен другой скрипт для генерации специально отформатированного списка всех сгенерированных имен файлов (цель - встроенная система, в которой нет JIT-компилятора). В любой момент времени существует более тридцати настроек, которые потенциально могут влиять на двоичный файл, и это может использоваться в более чем одном модуле в будущем, поэтому я хотел бы что-то масштабируемое.
Мое решение заключается в следующем. Вместо того, чтобы передавать переменные, я изменил свой скрипт, чтобы вывести строку, доступную для makefile-файла, основываясь на настройках:
-include $(SOME_MK_FILE)
$(SOME_MK_FILE) : .phony
script.pl $(SETTINGS_OF_INTEREST_LIST) > $(SOME_MK_FILE)
someFilename := $(shell script2.pl $(VAR1))
script.pl выводит строку, которая выглядит примерно так:
VAR1 := CONFIG_X1=$(CONFIG_X1) CONFIG_X2=$(CONFIG_X2) CONFIG_X33=$(CONFIG_X33)
и script2 выводит имя файла, которое выглядит примерно так: 'someFilename.X1_y.X2_n.elf'
, а затем, в другом правиле, у меня есть:
someobj: somedep
script3.pl $(someFilename) >> builtfiles.txt
, который правильно собирает buildfiles.txt (который, в свою очередь, является входом для еще одного скрипта ...). В конце концов, это обходной путь к тому факту, что make не может передать свою среду в $ (shell). Это не слишком красиво, но это работает.
John