Экспортировать функцию в Makefile

Это скорее комментарий, чем ответ, но, возможно, вы можете попытаться определить этот многоугольник как кривую Безье. Код довольно прост, и я уверен, что вы знакомы с тем, как работают эти кривые. В этом случае эта кривая будет контрольным полигоном. Но это не все идеально: во-первых, это не «сглаженная версия» этого многоугольника, а кривая и другое; чем выше степень кривой, тем меньше она выглядит как контрольный полигон. Я хочу сказать, что, возможно, вам следует попытаться решить эту проблему с помощью математических инструментов вместо того, чтобы сглаживать, а не сглаживать полигон с навыками программирования

1
задан Zelnes 13 July 2018 в 16:01
поделиться

1 ответ

Если вы хотите, чтобы это сработало, вы должны удвоить знаки $ в вашем определении:

define my_func
Hello $$(1) from $$(2)
endef
export my_func

Из руководства:

Для передачи вниз или export, переменная, make добавляет переменную и ее значение в среду для запуска каждой строки рецепта. Sub-make, в свою очередь, использует среду для инициализации своей таблицы значений переменных.

Вы должны защитить $ от одного дополнительного расширения.

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.
1
ответ дан Renaud Pacalet 17 August 2018 в 13:26
поделиться
  • 1
    Черт ! Почему я не попробовал это раньше ... Большое спасибо. Я не думал, что export повлияет на фактическое значение переменной – Zelnes 13 July 2018 в 09:16
  • 2
    Это не действительно экспорт (даже если он примерно такой же), это make, который расширяет эту переменную при вызове под-make. – Renaud Pacalet 13 July 2018 в 09:18
  • 3
    Тогда это make. Это очень интересный момент, чтобы знать – Zelnes 13 July 2018 в 09:22
  • 4
    Основываясь на вашем ответе, я хотел установить переменную VAR с результатом $(call my_func ...) в том же Makefile, но я получаю только одно расширение. Затем у меня есть дубликат my_func внутри VAR. Можно ли заставить экспансию? – Zelnes 13 July 2018 в 12:08
  • 5
    Вы правы, я слишком быстро по этому поводу. Итак, что вы хотите, можете использовать этот же макрос в Makefile, где он определен, и в другом Makefile, используемом вызовом под-make? Честно говоря, я застрял здесь. Нам нужна помощь от реального мастера. Безумный ученый, ты здесь? – Renaud Pacalet 13 July 2018 в 15:44
Другие вопросы по тегам:

Похожие вопросы: