Если вы хотите, чтобы это сработало, вы должны удвоить знаки $
в вашем определении:
define my_func
Hello $$(1) from $$(2)
endef
export my_func
Из руководства:
Для передачи вниз или export, переменная, make добавляет переменную и ее значение в среду для запуска каждой строки рецепта. Sub-make, в свою очередь, использует среду для инициализации своей таблицы значений переменных.
blockquote>Вы должны защитить
$
от одного дополнительного расширения.Of Конечно, вы не можете использовать тот же макрос в верхнем Makefile. Если это проблема, вы должны определить макрос для верхнего Makefile и еще один для make-make make-файла:
host> cat Makefile define my_func Hello $(1) from $(2) endef my_func_1 := $(call my_func,$$(1),$$(2)) export my_func_1 all: $(MAKE) -f Makefile_rec.mk $(info TOP: $(call my_func,StackOverFlow,Me)) host> cat Makefile_rec.mk all: $(info BOT: $(call my_func_1,StackOverFlow,Me)) host> make --no-print-directory TOP: Hello StackOverFlow from Me make -f Makefile_rec.mk BOT: Hello StackOverFlow from Me make[1]: 'all' is up to date.
Функция External Tools сделает то, что вы просите; Вы можете создать «внешний инструмент» с именем kubectl-apply
с любой из поддерживаемых ими переменных, а затем вызвать его с помощью любого количества встроенных механизмов