На самом деле вывод питона действителен make . Один из вариантов заключается в том, чтобы прочитать вывод питона непосредственно в make-файл. Единственная ложка дегтя состоит в том, что $(shell)
не разрезает горчицу.
include Environment.mk
PHONY: test
test:
env | grep MY_VAR
Environment.mk:
./set_env.py >$@-tmp
mv $@-tmp $@
Как это работает? Первое, что пытается сделать make , - это убедиться, что сам make-файл обновлен. Так как мы указали включить Environment.mk
, make должен также быть актуальным.
- Make находит правило для
Environment.mk
- Питон запускается, создается
Environment.mk
Environment.mk
, создается две make переменные с атрибутом экспорта - Makefile теперь обновлен, поэтому make переходит к цели (в нашем случае
test
) - Make запускает
test
рецепт, экспорт любых переменных с атрибутом экспорта.
Нет рекурсии, но вы должны убедиться, что питон всегда выплевывает make совместимый синтаксис.
EDIT
Как отмечает @raspy, это еще не все. В существующем состоянии после создания Environment.mk
он никогда не будет регенерирован.
Если set_env.py
генерирует другой вывод, вы должны сообщить make , что это за условия, добавив зависимости.
Если для запуска set_env.py
требуется тривиальное время, я советую простой .PHONY
. Таким образом, он будет работать каждый раз, когда вы запускаете make , и Environment.mk
никогда не устареет.
.PHONY: Environment.mk