LINUX.ORG.RU

временные переменные в make

 


0

2

в общем, как всегда хочется странного, а именно примерно такой конструкции в Makefile


SRCS := a.c b.c c.c

define my_template = 
__tmp_target := список операций над $(1)
$(__tmp_target): $(1)
    тут фигня для сборки цели
clean_files += $(__tmp_target)
endef # my_template

$(foreach src,$(SRCS),$(eval $(call my_template,$(src))))

Проблема возникает из-за временной переменной __tmp_target: цели получаются типа таких

a.o:
    bla-bla-bla

b.o: a.c
    bla-bla-bla

c.o: b.c
    bla-bla-bla

И вот понять я не могу — почему переменная __tmp_target себя так ведет?

★★★★★

$(var) это переменная извне шаблона, как и $1. Для внутренних переменных должно быть $$(var), так как они должны раскрыться при исполнении, а не определении.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

т.е. ты предлагаешь наплодить переменных типа target_$(1), а цели сделать вроде того:

$$(target_$(1)): ...
    ....

Или нет?

demidrol ★★★★★
() автор топика
Ответ на: комментарий от demidrol

Да, нечто подобное, хотя синтаксис можно варьировать, например:

$1.bin := $1

$$($1.bin): $$($1.obj)
Правда надо ещё привыкнуть к внешнему виду таких конструкций.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.