Спасибо @kevinf за решение foreach - если кто-то захочет экспортировать этот список в виде файла, который можно прочитать на компьютере, он будет испытывать трудности с неравными кавычками или переводами строки при использовании echo или printf, поскольку Make не возможность правильно процитировать данные - нужно использовать функцию $ (file ...) для записи данных, чтобы sh / bash не жаловался на неверный синтаксис. Например, используйте это в своем правиле - оно печатает имя переменной, определение и расширенное значение:
$(file > $(MAKEFILE_ENV_FILE),)
$(foreach v, $(.VARIABLES), \
$(file >> $(MAKEFILE_ENV_FILE),$(v)) \
$(file >> $(MAKEFILE_ENV_FILE), := $(value $(v))) \
$(file >> $(MAKEFILE_ENV_FILE), == $($(v))) \
$(file >> $(MAKEFILE_ENV_FILE),) \
)
(Это по-прежнему не позволит всегда отличать вредоносные переменные с двойным переводом строки от двух переменных, поскольку теперь к этому добавляется достаточно уникальный разделитель перед каждым созданным Makefile символом новой строки сразу после каждой запятой внутри $(file >> NAME,TEXT)
)
Установите для MAKEFILE_ENV_FILE какое-либо имя файла, например ::
MAKEFILE_ENV_FILE := $(abspath $(lastword $(MAKEFILE_LIST))).env